En la era digital, las redes sociales se han convertido en un campo de batalla para la información, donde la gran influencia de las celebridades podría ser aprovechada para sembrar división y debate.

Este proyecto investiga la dinámica de cómo los trolls en Twitter han utilizado a las figuras públicas prominentes, como Taylor Swift, Kanye West, Beyoncé, entre otros, durante eventos clave como las elecciones en EE.UU., con el fin de discernir las posibles intenciones detrás de estos tweets. Mediante un enfoque de análisis de texto y topic mining, se busca explorar los temas específicos alrededor de los cuales estos trolls generaron debate.

Iniciaremos ahora un análisis detallado para descubrir cómo se ha manejado la imagen de las celebridades e intentar desentrañar los objetivos subyacentes de tales estrategias.

Beyonce apoyando a Hillary Clinton

Beyonce apoyando a Hillary Clinton


1 Creación del DATASET

1.1 Carga de Paquetes y Configuración del Entorno

# Carga de paquetes esenciales para el análisis de texto
library(quanteda)
library(quanteda.textplots)
library(stringr)
library(quanteda.textstats)
library(tidyverse)
library(forcats)
library(tidytext)
library(ggplot2)
library(scales)
library(dplyr)
library(tidyr)
library(topicmodels)
library(wordcloud)
library(RColorBrewer)

# Opcional: Instalación de paquetes si es necesario
# install.packages("syuzhet")
# install.packages("textdata")
library(syuzhet)
library(textdata)

# Instalación de paquetes desde GitHub
# install.packages("devtools")
# devtools::install_github("kbenoit/quanteda.dictionaries")

# Establecimiento del directorio de trabajo
setwd("C:/Users/marib/Documents/UTad/Curso 3/BAI/Practica1/Tarea_1_Text_y_ topic_mining_sobre_trolls/Tarea_1_Mar_Iborra")

1.2 Lectura de los Datos

# Definición de la ruta a la carpeta con los ficheros CSV
ruta_ficheros <- "./russian-troll-tweets-master/"
mis_ficheros <- list.files(ruta_ficheros, pattern = "*.csv", full.names = TRUE)

# Inicialización del data frame que almacenará los datos consolidados
datos_twitter <- data.frame()

# Lectura y unión de todos los ficheros CSV
for (fichero in mis_ficheros) {
    datos_temp <- read.csv(file = fichero, header = TRUE, sep = ",")
    datos_twitter <- rbind(datos_twitter, datos_temp)
}

# Visualización del número de filas del data frame consolidado
print(nrow(datos_twitter))
## [1] 2946207

1.3 Limpieza de Datos

# Selección de columnas relevantes para el análisis
datos_twitter <- datos_twitter[, c("author", "content", "region", "language", "publish_date", "post_type", "account_type", "account_category")]

# Transformación de variables categóricas a factores
datos_twitter$region <- as.factor(datos_twitter$region)
datos_twitter$language <- as.factor(datos_twitter$language)
datos_twitter$post_type <- as.factor(datos_twitter$post_type)
datos_twitter$account_type <- as.factor(datos_twitter$account_type)
datos_twitter$account_category <- as.factor(datos_twitter$account_category)

# Conversión de la columna de fecha de publicación a formato de fecha
datos_twitter$publish_date <- as.Date(datos_twitter$publish_date, format = "%m/%d/%Y")

# Filtrado para conservar solo los tweets en inglés
datos_ingles <- subset(datos_twitter, language == "English")

1.4 Preprocesamiento del Texto de los Tweets

# Limpieza del contenido de los tweets 
datos_ingles$content <- gsub("(#\\w+)|(http\\S+)|(https\\S+)|(&amp;)|(@\\w+)|(RT)|[^\\p{L}\\p{N}'\\s]", "", datos_ingles$content, perl = TRUE)

# Conversión del texto a minúsculas para homogeneizar el contenido
datos_ingles$content <- tolower(datos_ingles$content)

1.5 Guardado de los Datos Limpios

# Guardado del conjunto de datos filtrados y limpios para análisis posteriores
save(datos_ingles, file = "conjunto_datos/datos_ingles_filtrados.rda")

# Impresión de la cantidad de registros después de la limpieza
print(nrow(datos_ingles))
## [1] 2116867

2 Buscando temas raros…

load("conjunto_datos/datos_ingles_filtrados.rda")

En este segmento del análisis, nos enfocaremos en identificar palabras clave para filtrar y obtener tweets que mencionan a figuras públicas y celebridades involucradas en debates y polémicas de índole social y política.

2.1 Primer vistazo a tweets relacionados con Celebridades

# Expresión regular para incluir "celebrities" y sus sinónimos
terminos_relacionados <- "celebrities|celebs|famous|famous people|public figures"

# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_relacionados, datos_ingles$content, ignore.case = TRUE)

print(paste("Número total de tweets que contienen términos relacionados con 'celebridades':", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con 'celebridades': 3176"
# Mostrar los contenidos de los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
##  [1] "this eminem freestyle proves that celebs still haven't learned that nobody cares what they have to say sad  "                        
##  [2] "the truth about puerto rico   it's not the propaganda mayor of  has been spewing wmsm  cluless celebrities   "                       
##  [3] "by the way this is the now infamous librarian dressed as cat in the hat oh my this is some inapropriate stuff "                      
##  [4] "the legendary  correspondent charles wheelers famous report on the watts riots of 1965   "                                           
##  [5] "see the hottest spots in la where celebrities go to play book your  tix  "                                                           
##  [6] "y'all favorite celebrities ain't ready to die for the rights and beliefs of black people they got too much to lose y y'all expect it"
##  [7] "more celebrities to visit the white house   "                                                                                        
##  [8] " celebrities blame trump for the charlottesville attack   "                                                                          
##  [9] " triggered celebs have meltdown look what they are claiming about trump   "                                                          
## [10] "celebrities were 'orgasmic' when senate healthcare bill failed exclusive video   "

Con un total de 3176 tweets que mencionan términos relacionados con ‘celebridades’, observamos cómo las figuras públicas se convierten en un foco dentro de la narrativa de los trolls en Twitter.

Los extractos mostrados cubren una gama de temas, desde críticas a celebridades por su activismo hasta eventos sociopolíticos específicos, reflejando lo que parece una estrategia para utilizar la influencia y visibilidad de estas figuras para llegar a más público.

A este conjunto, ampliaremos nuestra búsqueda para incluir menciones específicas de personas famosas que han sido figuras centrales en diversas controversias durante eventos cruciales. Este enfoque detallado nos permitirá analizar cómo ciertas celebridades fueron utilizadas para crear polémica, influir en la opinión pública o desviar la atención en momentos de significativa importancia política y social.

Algunas de las celebridades más influyentes fueron:

2.1.1 Taylor Swift

# Expresión regular para incluir términos relacionados
terminos_swift <- "taylor swift|swift|swifties|taylornation|taylor gang"

# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_swift, datos_ingles$content, ignore.case = TRUE)

# Imprimir el número total de tweets 
print(paste("Número total de tweets que contienen términos relacionados con Taylor Swift:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Taylor Swift: 893"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
##  [1] "taylor swift's transition into hillary clinton is almost complete"                                       
##  [2] "heres how celebrities have been reacting to the taylor swiftkim kardashian drama  "                      
##  [3] " a swift kick in the pants"                                                                              
##  [4] "  ladyjustice2016  enjoy some swift justice for knife wielding migrant at the border of spain  "         
##  [5] "hey taylor swift quit trolling david  "                                                                  
##  [6] "more proof that taylor swift is the nicest woman in the world     "                                      
##  [7] "taylor swift and hailey baldwin alleged feud heating up  gigi hadid taking sides "                       
##  [8] "celebs arguing rockettes shouldnt be forced to perform at inauguration swiftly exposed as total frauds  "
##  [9] "taylor swift and hailey baldwin alleged feud heating up  gigi hadid taking sides "                       
## [10] "according to my calculations    b²  4 a c             b  x12                   2a  swifties are tragic "
# Mostrar los tweets 
taylor_seleccionados <- datos_ingles[indices, ]
View(taylor_seleccionados)

Taylor Swift se encontró en el centro de varias polémicas y discusiones políticas y sociales, marcando un período de transición en su carrera donde comenzó a involucrarse más abiertamente en temas de relevancia pública.

Estos tweets ilustran no solo el papel de Taylor Swift como objeto de discusión en debates políticos y sociales, sino también cómo su figura es utilizada para comentar sobre asuntos de importancia.

2.1.2 Kanye West

# Expresión regular para incluir términos relacionados
terminos_kanye <- "kanye|yeezy|kanye west"

# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_kanye, datos_ingles$content, ignore.case = TRUE)

# Imprimir el número total de tweets 
print(paste("Número total de tweets que contienen términos relacionados con Kanye West:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Kanye West: 1284"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
##  [1] "kanye west says he 'would have voted' for donald trump "                                                   
##  [2] "social media diagnosed kanye with mental illness since when ya'll doctors that man might have bronchitis"  
##  [3] "praying for kanye praying he has the right energy surrounding him during this time sending peace and love "
##  [4] "he pretty much said everything except kanye's name "                                                       
##  [5] "inspiring  topical as kanye allways does    "                                                              
##  [6] "rihanna joined kanye onstage after pretending to be a normal person  "                                     
##  [7] "'  closer to kanye's election weeeeeeeeeee'"                                                               
##  [8] "kanye west finally releases new album get all the details   "                                              
##  [9] "kanye did the millionaire equivalent of finally putting his inlaw's mixtape on in his car"                 
## [10] "there's nothing that makes kanye look more like a regular person than his dealings with his inlaws "
# Mostrar los tweets 
kanye_seleccionados <- datos_ingles[indices, ]
View(kanye_seleccionados)

El conjunto de tweets relacionados con Kanye West, que asciende a 1284 menciones, refleja la complejidad de su figura pública y el impacto que tiene en diversas esferas, desde la música hasta la política y la salud mental. Un aspecto destacado es su expresión de apoyo a Donald Trump, lo cual provocó debates intensos sobre política, identidad y cultura. Esta declaración, al margen de sus implicaciones políticas, evidencia cómo las opiniones de las celebridades pueden resonar en el ámbito público, generando discusiones y polarización.

2.1.3 Beyoncé

Por lo visto en clase y reflejado en diversos análisis, Beyoncé emerge repetidamente como una figura central en múltiples contextos y debates, por lo que también se le va a incluir en este análisis para ver como se uso para influir y crear debate.

# Expresión regular para incluir términos relacionados
terminos_beyonce <- "beyonc|beyonce|beyoncé|Bey hive"

# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_beyonce, datos_ingles$content, ignore.case = TRUE)

# Imprimir el número total de tweets 
print(paste("Número total de tweets que contienen términos relacionados con Beyonce:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Beyonce: 2003"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
##  [1] "you have the right to watch  film police activities   beyonce  "                                            
##  [2] "beyonces dancers demand     "                                                                               
##  [3] "this lemon is on steroids someone call beyonce  "                                                           
##  [4] "beyoncé is not some dead african spirit get a life"                                                         
##  [5] "'  i wanna have the odd photo with beyonce 2'"                                                              
##  [6] "coupled up waka flocka shows pda with tammy rivera  blames breakup on beyonce she pulled a solange in the  "
##  [7] "beyonce told us to go to red lobster to save money for them tour tickets "                                  
##  [8] "antiantibeyoncé protest growing still no antibeyoncé protest "                                              
##  [9] "beyoncé the way your not so subliminal message slayed  "                                                    
## [10] "  beyonce lowkey was paying homage to the late great michael jackson     "
# Mostrar los tweets 
beyonce_seleccionados <- datos_ingles[indices, ]
View(beyonce_seleccionados)

Los tweets relacionados con Beyoncé capturan una amplia gama de temas que reflejan tanto su impacto cultural como las diversas percepciones públicas sobre su figura. Desde la mención de sus actividades políticas y demandas sociales, especialmente su apoyo al movimiento Black Lives Matter y su participación activa en campañas por la igualdad de género, hasta referencias a su música y mensajes subliminales, Beyoncé es presentada como una figura de influencia significativa en diversos ámbitos. Su participación en eventos de gran envergadura, como las actuaciones en el Super Bowl y su visibilidad en campañas presidenciales, subraya su posición como una voz poderosa en el diálogo nacional sobre justicia social y política.

2.1.4 Otros …

# Definir términos de búsqueda de celebridades
terminos_celebridades <- c("oprah", "jimmy fallon", "lady gaga", "colin kaepernick", "kendrick lamar",
                           "lebron james", "alicia keys", "ellen degeneres", "chris evans",
                           "serena williams", "janelle monáe", "dave chappelle", "emma watson",
                           "chance the rapper", "meryl streep", "angelina jolie", "eminem")

# Inicializar una lista para almacenar los índices de tweets
indices_tweets_celebridades <- integer(0)

# Función para buscar y almacenar índices de tweets de celebridades
buscar_y_almacenar_indices <- function(termino) {
  indices <- grep(termino, datos_ingles$content, ignore.case = TRUE)
  indices_tweets_celebridades <<- c(indices_tweets_celebridades, indices)
}

# Bucle para cada término de búsqueda de celebridades
for(termino in terminos_celebridades) {
  buscar_y_almacenar_indices(termino)
}

# Eliminar índices duplicados
indices_tweets_celebridades <- unique(indices_tweets_celebridades)

# Subconjunto de datos basado en índices encontrados
tweets_filtrados <- datos_ingles[indices_tweets_celebridades, ]

# Mostrar subconjunto de datos filtrado
View(tweets_filtrados)

# Imprimir el número total de tweets filtrados
print(paste("Número total de tweets filtrados por menciones de celebridades:", length(indices_tweets_celebridades)))
## [1] "Número total de tweets filtrados por menciones de celebridades: 4726"

La elección de este tema surge de la comprensión de que las celebridades ejercen una influencia significativa en sus seguidores y en la sociedad en general. Su capacidad para alcanzar y movilizar grandes audiencias las convierte en figuras clave dentro del tejido social y cultural contemporáneo. La intención de este proyecto es examinar cómo se utilizaron sus imágenes y declaraciones dentro del contexto de polémicas y debates políticos e intentar ver cuales eran las intenciones detras de estos comentarios.


3. Análisis del Dataset

3.1 Filtrar y Guardar el Conjunto de Datos

Vamos a reemplazar todas las apariciones de “Beyoncé” con “Beyonce” en el conjunto de datos. Ahora, cada mención de la artista se unificará bajo una sola ortografía sin tilde. Esto asegurará la consistencia al analizar o visualizar menciones de esta celebridad en los datos.

datos_ingles$content <- gsub("beyoncé", "beyonce", datos_ingles$content, fixed = TRUE)
# Palabras o frases similares a los términos de búsqueda que queremos excluir
palabras_eliminar <- c( "swiftly", "infamous", "celebration", "kanyes", "western")

# Función para eliminar las palabras específicas del contenido de los tweets
eliminar_palabras <- function(texto, palabras) {
  # Construir la expresión regular para las palabras a eliminar
  patron_eliminar <- paste(palabras_eliminar, collapse = "|")
  # Reemplazar las ocurrencias de las palabras en el texto por una cadena vacía
  texto_limpio <- gsub(patron_eliminar, "", texto, ignore.case = TRUE)
  return(texto_limpio)
}

# Aplicamos la función para eliminar palabras específicas
datos_ingles$content <- sapply(datos_ingles$content, eliminar_palabras, palabras = palabras_eliminar)
# Actualizamos los términos de búsqueda para reflejar la unificación hecha
terminos_busqueda <- c("celebrities|celebs|famous|famous people|public figures",
                       "taylor swift|swift|swifties|taylornation|taylor gang",
                       "kanye|yeezy|kanye west",
                       "beyonc|beyonce|Bey hive",
                       "oprah", "jimmy fallon", "lady gaga", "colin kaepernick", "kendrick lamar",
                       "lebron james", "alicia keys", "ellen degeneres", "chris evans",
                       "serena williams", "janelle monáe", "dave chappelle", "emma watson",
                       "chance the rapper", "meryl streep", "angelina jolie", "eminem")

# Unificamos los términos de búsqueda en una sola expresión regular
terminos_busqueda_juntos <- paste(terminos_busqueda, collapse = "|")

# Filtramos el dataset para incluir solo tweets con los términos de búsqueda
datos_filtrados_celebridades <- subset(datos_ingles, grepl(terminos_busqueda_juntos, datos_ingles$content))

# Finalmente, guardamos el nuevo conjunto de datos filtrado y limpio
save(datos_filtrados_celebridades, file = "conjunto_datos/datos_filtrados_celebridades.rda")

3.2 Primera Inspección del Conjunto de Datos Filtrado

# Inspeccionar la estructura del conjunto de datos filtrado
str(datos_filtrados_celebridades)
## 'data.frame':    11581 obs. of  8 variables:
##  $ author          : chr  "10_GOP" "10_GOP" "10_GOP" "10_GOP" ...
##  $ content         : chr  "this eminem freestyle proves that celebs still haven't learned that nobody cares what they have to say sad  " "eminem is a trump supporter   " "the truth about puerto rico   it's not the propaganda mayor of  has been spewing wmsm  cluless celebrities   " "cnn's ana navarro  is spreading a photoshopped picture of lebron james to fan the flames of anti trump hate   " ...
##  $ region          : Factor w/ 37 levels "","Afghanistan",..: 37 37 37 37 37 36 36 36 36 36 ...
##  $ language        : Factor w/ 56 levels "Albanian","Arabic",..: 10 10 10 10 10 10 10 10 10 10 ...
##  $ publish_date    : Date, format: "2017-10-11" "2017-10-12" ...
##  $ post_type       : Factor w/ 3 levels "","QUOTE_TWEET",..: 1 3 3 3 1 3 3 3 1 3 ...
##  $ account_type    : Factor w/ 19 levels "?","Arabic","Commercial",..: 14 14 14 14 14 14 10 10 10 10 ...
##  $ account_category: Factor w/ 8 levels "Commercial","Fearmonger",..: 7 7 7 7 7 7 4 4 4 4 ...
# Resumen estadístico del conjunto de datos filtrado
summary(datos_filtrados_celebridades)
##     author            content                     region          language    
##  Length:11581       Length:11581       United States :9985   English  :11581  
##  Class :character   Class :character   Unknown       :1519   Albanian :    0  
##  Mode  :character   Mode  :character   Azerbaijan    :  22   Arabic   :    0  
##                                        Iraq          :  14   Bengali  :    0  
##                                        United Kingdom:  12   Bulgarian:    0  
##                                        Canada        :   7   Catalan  :    0  
##                                        (Other)       :  22   (Other)  :    0  
##   publish_date              post_type        account_type      account_category
##  Min.   :2014-11-27              :6545   Left      :4286   LeftTroll   :4286   
##  1st Qu.:2016-04-22   QUOTE_TWEET:  40   Right     :3475   RightTroll  :3475   
##  Median :2016-11-08   RETWEET    :4996   local     :2119   NewsFeed    :2480   
##  Mean   :2016-09-30                      Hashtager : 956   HashtagGamer: 956   
##  3rd Qu.:2017-03-31                      news      : 361   Commercial  : 154   
##  Max.   :2018-05-13                      Commercial: 154   NonEnglish  : 121   
##                                          (Other)   : 230   (Other)     : 109
table(datos_filtrados_celebridades$account_category)
## 
##   Commercial   Fearmonger HashtagGamer    LeftTroll     NewsFeed   NonEnglish 
##          154           61          956         4286         2480          121 
##   RightTroll      Unknown 
##         3475           48

El conjunto de datos refleja una amplia colección de 11,581 observaciones, detallando la actividad de cuentas específicamente designadas como trolls en Twitter, con una predominancia de publicaciones en inglés y centradas en Estados Unidos. La distribución temporal de las publicaciones, desde finales de 2014 hasta mediados de 2018, abarca un periodo crítico en el contexto político estadounidense, incluyendo las elecciones presidenciales de 2016 y sus secuelas. Este intervalo fue marcado por intensas divisiones políticas y sociales, donde figuras como Donald Trump y eventos como las protestas de derechos civiles jugaron papeles significativos.

Las categorías de cuentas más representadas —“LeftTroll”, “RightTroll”, y “NewsFeed”— sugieren una estrategia que podría estar dirigida a polarizar aún más el discurso político, mientras que “NewsFeed” podría estar dirigido a simular una cobertura mediática legítima, posiblemente para difundir o comentar eventos que celebraron figuras famosas.

view(datos_filtrados_celebridades)
View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

View del conjunto de datos

Estos son algunos ejemples de los temas más discutidos durante el período de 2016 a 2019. Aunque se comentan muchos más temas y se profundizará en estos aspectos en futuras secciones del estudio, esta visión preliminar ofrece una idea de la naturaleza multifacética y de la amplitud del discurso en las redes sociales durante ese tiempo. Estos ejemplos resaltan la complejidad del entorno de la información y cómo diversos temas, que van desde la política y elecciones hasta cuestiones sociales y raciales, son discutidos en los tweets.

Estos datos iniciales sugieren cómo las figuras públicas y eventos actuales parecen ser usados por los trolls para influir en la opinión pública y tal vez usarlos para provocar división, aunque este es solo un primer vistazo, A continuacón procedemos a hacer un análisis más exhaustivo sobre la profundidad de estas actividades.

3.3 Análisis de Distribución de Tokens por Categoría

load("conjunto_datos/datos_filtrados_celebridades.rda")

3.3.1 Limpieza StopWords

# Eliminación de stop words
datos_limpieza_celebridades <- datos_filtrados_celebridades %>%
  unnest_tokens(word, content) %>%
  mutate(word = str_replace_all(word, "'s$", "")) %>%  
  anti_join(stop_words, by = "word") %>%
  filter(str_detect(word, "^[a-z]+$")) %>%  
  group_by(account_category, language, author, publish_date, region, post_type) %>%
  summarise(content = paste(word, collapse = " ")) %>%
  ungroup()

# Guardar el conjunto de datos después de eliminar stop words
save(datos_limpieza_celebridades, file = "conjunto_datos/datos_limpieza_celebridades.rda")

view(datos_limpieza_celebridades)

3.3.2 Análisis

# Crear tokens del corpus
tokens_celebridades <- quanteda::tokens(datos_limpieza_celebridades$content,
                                        remove_numbers = TRUE,
                                        remove_punct = TRUE,
                                        remove_symbols = TRUE,
                                        remove_separators = TRUE,
                                        remove_url = TRUE) %>%
                      tokens_select(pattern = stopwords("en"), selection = "remove")

# Crear una matriz de términos documentales 
dfm_celebridades <- dfm(tokens_celebridades)
# Generar frecuencias de tokens para todos los grupos
freqs <- textstat_frequency(dfm_celebridades,
                            n = 7,
                            groups = datos_limpieza_celebridades$account_category)

# Generar gráfico con ggplot
g1 <- ggplot(data = freqs, 
            aes(x = feature,
                y = frequency,
                fill = group)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(x = "Token", y = "Frecuencia", fill = "Categoría de Cuenta") +
  ggtitle("Frecuencia de Tokens por Categoría de Cuenta")

# Visualizar gráfico
print(g1)

# Guardar gráfico
ggsave("imagenes/frecuencia_tokens_todas_categorias.png", g1, width = 10, height = 7)
freqs <- textstat_frequency(dfm_celebridades,
                            n = 12,
                            groups = datos_limpieza_celebridades$account_category)

interesantes <- c("LeftTroll", "RightTroll", "NewsFeed")  
  
# Filtramos los datos para incluir solo las categorías de interés
freqs_interes <- freqs %>% filter(group %in% interesantes)

# Creamos el gráfico de barras ordenando los tokens por frecuencia
g2 <- ggplot(data = freqs_interes, 
             aes(x = fct_reorder(feature, frequency),
                 y = frequency,
                 fill = group)) +
    geom_bar(stat = "identity") +
    coord_flip() +
    labs(x = "Token", y = "Frecuencia", fill = "Categoría de Cuenta") +
    theme_minimal() +
    theme(legend.position = "bottom")

# Mostramos el gráfico
print(g2)

# Guardar el gráfico
ggsave("imagenes/frecuencia_tokens_categorias_interes.png", g2, width = 10, height = 7)

La visualización de la frecuencia de tokens por categoría de cuenta revela patrones en el discurso en Twitter que pueden estar relacionados con las tácticas de los trolls durante un período marcado por eventos políticos significativos.

Los “LeftTroll” mencionan frecuentemente a “beyonce”, lo que podría estar vinculado a su influencia cultural y sus posturas sobre temas de justicia social, que a menudo resuenan con el público progresista. La palabra “black” también destaca en esta categoría, posiblemente debido al debate en torno al movimiento Black Lives Matter y otras discusiones raciales importantes de la época. “Kanye” aparece principalmente en las menciones de los “LeftTroll”. Esto puede reflejar la controversia que generó su apoyo a Donald Trump, una postura que sorprendió y dividió a sus seguidores.

En contraste, “taylor” y “swift” son más prominentes en “NewsFeed” y entre los “RightTroll”, lo que puede deberse a la creciente politización de Taylor Swift y su implicación en asuntos políticos, como el apoyo a la igualdad de género y la crítica a las políticas de Trump. “Eminem” también es más mencionado por los “RightTroll”, tal vez como respuesta a sus comentarios críticos hacia Trump y su administración.

Los tokens “president”, “presidential” y “trump” son clave en esta visualización, reflejando el intenso debate político de la época. Muchas celebridades tomaron posturas políticas claras durante las elecciones, lo que podría haber amplificado su presencia en las discusiones en línea.

En general, estos datos podrían sugerir que las figuras públicas con influencia política y cultural son herramientas poderosas en la estrategia de los trolls para influir en el discurso público, lo que resalta la intersección entre la cultura pop y la política en las tácticas de manipulación de opinión pública.

3.4 Tendencias Temporales en la Actividad de Cuentas RightTroll, LeftTroll y NewsFeed

# Filtrado de Tweets por Fecha y Categoría:
interesantes <- c("LeftTroll", "RightTroll", "NewsFeed") 

tweets_para_dibujo <- datos_limpieza_celebridades %>%
  filter(publish_date > as.Date("2014-01-01") &
         account_category %in% interesantes)

nrow(tweets_para_dibujo)
## [1] 7866
g3 <- ggplot(tweets_para_dibujo, 
       aes(x = publish_date, 
           fill = account_category)) +
  geom_histogram(position = "identity", 
                 bins = 20, 
                 show.legend = FALSE) +
  facet_wrap(~account_category, ncol = 1)

# Mostrar el gráfico
print(g3)

# Guardar el gráfico en un archivo PNG
ggsave("imagenes/tendencias_temporales_rightleft_troll.png", g3, width = 10, height = 7)

El gráfico revela tendencias interesantes en cuanto a la actividad en Twitter de cuentas clasificadas como LeftTroll, RightTroll y NewsFeed a lo largo del tiempo.

Para las cuentas de LeftTroll, hay un notable incremento en la actividad hacia mediados de 2016, que llega a su cumbre a finales de ese año, coincidiendo posiblemente con la campaña y elecciones presidenciales en Estados Unidos, un evento que suele generar considerable debate y movilización en redes sociales.

El pico en la actividad de las cuentas de RightTroll hacia finales de 2017 puede estar vinculado a varios eventos significativos, incluyendo las discusiones sobre la reforma tributaria en Estados Unidos, diversas políticas ejecutivas y posiblemente las secuelas de la respuesta a los sucesos de Charlottesville en agosto de ese año. Durante este periodo, los movimientos sociales y políticos a menudo estaban en el centro de atención, lo que probablemente contribuyó a la creciente actividad en las plataformas sociales por parte de estas cuentas.

Por otro lado, las cuentas categorizadas como NewsFeed mantienen una frecuencia de publicaciones más uniforme y baja a lo largo del tiempo, lo que podría indicar una estrategia de difusión constante de contenido.

3.5 Análisis de Contenido y Distribución de Palabras en Tweets

# Eliminación de Retweets y Conteo de Palabras
tweets_para_dibujo <- datos_limpieza_celebridades %>%
  filter(!str_detect(content, "^RT"))

nrow(tweets_para_dibujo)
## [1] 8906
# Procesamiento de los tweets para análisis de palabras
twitter_words <- tweets_para_dibujo %>%
  unnest_tokens(word, content) %>%
  count(account_category, word, sort = TRUE)

# Calcular el total de palabras por categoría de cuenta
total_words <- twitter_words %>% 
  group_by(account_category) %>%
  summarize(total = sum(n))

# Unir los totales con las frecuencias de palabras
twitter_words <- left_join(twitter_words, total_words, by = "account_category")
# Cálculo de TF-IDF
tweet_tf_idf <- twitter_words %>%
  bind_tf_idf(word, account_category, n)

tweet_tf_idf %>%
  select(-total) %>%
  arrange(desc(tf_idf))
# Análisis de la Ley de Zipf
freq_by_rank <- twitter_words %>%
  group_by(account_category) %>%
  mutate(rank = row_number(), term_frequency = n/total) %>%
  ungroup()

zipf <- lm(log10(term_frequency) ~ log10(rank), data = freq_by_rank)

summary(zipf)
## 
## Call:
## lm(formula = log10(term_frequency) ~ log10(rank), data = freq_by_rank)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.93553 -0.06350  0.00275  0.05807  0.57219 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.710662   0.005290  -134.3   <2e-16 ***
## log10(rank) -1.022392   0.001656  -617.4   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1187 on 17089 degrees of freedom
## Multiple R-squared:  0.9571, Adjusted R-squared:  0.9571 
## F-statistic: 3.812e+05 on 1 and 17089 DF,  p-value: < 2.2e-16

El modelo de regresión aplicado para analizar la Ley de Zipf muestra una fuerte correlación negativa entre la frecuencia de los términos y su rango de frecuencia, como se esperaría según la ley. El valor de R-squared es extremadamente alto (0.9571), indicando que el modelo se ajusta muy bien a los datos y que la relación entre la frecuencia de términos y su rango sigue muy de cerca la distribución prevista por la Ley de Zipf. Esto significa que los términos más comunes son utilizados con mucha más frecuencia que los menos comunes, en una proporción predecible.

# Visualización incluyendo la línea de ajuste de Zipf y leyenda de categorías
g_zipf <- freq_by_rank %>%
  ggplot(aes(x = rank, y = term_frequency, color = account_category)) + 
  geom_abline(intercept = coef(zipf)[1], slope = coef(zipf)[2], color = "gray50", linetype = 2) +
  geom_line(linewidth = 1.1, alpha = 0.8) +  
  scale_x_log10() +
  scale_y_log10() +
  theme_minimal() +
  labs(color = "Categoría de Cuenta")  

# Mostrar el gráfico 
print(g_zipf)

ggsave("imagenes/ley_zipf_con_leyenda.png", g_zipf, width = 10, height = 7)

El gráfico ilustra la relación entre la frecuencia de términos y su rango en una escala logarítmica, comparando diferentes categorías de cuentas de Twitter. La línea de puntos representa la relación esperada según la Ley de Zipf. Cada categoría de cuenta sigue una tendencia similar, donde los términos más frecuentes tienen un rango bajo y su frecuencia disminuye rápidamente a medida que el rango aumenta. Esto es típico de una distribución lingüística natural donde unas pocas palabras son muy comunes, y muchas son raras. La adherencia cercana de los datos a la línea de Zipf sugiere que, independientemente de la categoría de la cuenta, el uso de palabras en Twitter sigue patrones comunes de comunicación humana.

En el gráfico, las categorías como ‘Unknown’ y ‘NonEnglish’ pueden mostrar líneas más cortas debido a un conjunto de datos más pequeño, lo que significa que hay menos palabras únicas en esas categorías, o que las palabras no se repiten con tanta frecuencia como en otras categorías, llevando a un corte más rápido en la representación de la ley de Zipf.

3.6 Comparación de la Frecuencia de Palabras entre RightTroll y LeftTroll

# Filtrado de Palabras y Cálculo de Frecuencia Relativa
datos_filtrados_celebridades %>%
  unnest_tokens(word, content) %>%
  filter(!word %in% stop_words$word,
         !word %in% str_remove_all(stop_words$word, "'"),
         str_detect(word, "[a-z]")) -> tokens_celebridades

frequency <- tokens_celebridades %>% 
  count(account_category, word, sort = TRUE) %>%
  left_join(tokens_celebridades %>% 
              count(account_category, name = "total"), by = "account_category") %>%
  mutate(freq = n / total)

head(frequency)
# Preparación para Comparación de Frecuencias
frequency_para_plot <- frequency %>%
  filter(account_category %in% c("RightTroll", "LeftTroll"))

frequency_para_plot <- frequency_para_plot %>% 
  select(account_category, word, freq) %>%
  pivot_wider(names_from = account_category, values_from = freq) %>%
  arrange(RightTroll, LeftTroll)

umbral_right_troll <- quantile(frequency_para_plot$RightTroll, probs = 0.5, na.rm = TRUE) * 10000000
umbral_left_troll <- quantile(frequency_para_plot$LeftTroll, probs = 0.5, na.rm = TRUE) * 10000000

print(paste("Umbral RightTroll:", umbral_right_troll))
## [1] "Umbral RightTroll: 392.356887825166"
print(paste("Umbral LeftTroll:", umbral_left_troll))
## [1] "Umbral LeftTroll: 646.266197046564"

Los umbrales calculados representan un punto de corte para seleccionar las palabras más representativas de cada categoría de cuentas de trolls. Para la categoría “RightTroll”, el umbral es aproximadamente 392, lo que indica que solo se considerarán las palabras que aparezcan más de esta cantidad en la transformación logarítmica aplicada. Para “LeftTroll”, el umbral es aproximadamente 646, un número mayor que refleja una frecuencia más alta de palabras clave o más comunes en esta categoría.

Estos valores sugieren que las palabras en la categoría “LeftTroll” tienden a concentrarse en torno a un grupo más pequeño de palabras comunes, mientras que las de “RightTroll” están más dispersas entre una variedad más amplia de palabras. Esto podría indicar diferencias en la forma en que cada grupo enfoca sus mensajes o en la diversidad de temas que abordan.

# Seleccionar palabras que superen el umbral en ambas categorías
frequency_para_plot_2 <- frequency_para_plot %>%
  filter((RightTroll * 1e7 > umbral_right_troll) & (LeftTroll * 1e7 > umbral_left_troll))
# Visualización de la Comparación de Frecuencias
ggplot(frequency_para_plot_2, aes(x = RightTroll, y = LeftTroll)) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.25, height = 0.25) +  
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +  
  scale_x_log10(labels = percent_format()) +  
  scale_y_log10(labels = percent_format()) +  
  geom_abline(color = "red") +  
  labs(x = "Frecuencia en RightTroll (log)", y = "Frecuencia en LeftTroll (log)", title = "Comparación de Frecuencia de Palabras: RightTroll vs. LeftTroll") +  
  theme_minimal()  

La gráfica muestra un diagrama de dispersión comparando la frecuencia de palabras entre las cuentas clasificadas como RightTroll y LeftTroll en una escala logarítmica. Los puntos representan palabras individuales, situados según su frecuencia relativa en los tweets de cada categoría.

Las palabras que se encuentran más cercanas a la línea roja diagonal tienen una frecuencia similar entre las dos categorías, indicando que son comúnmente utilizadas por ambos grupos, como “woman”, “lebron”, “kaepernick”, “america”.

Las palabras que se desvían de la línea roja muestran una tendencia a ser más frecuentes en una categoría que en la otra. Por ejemplo:

  • Palabras como “beyonce” y “black”, que predominan en el eje de LeftTroll, sugieren una mayor tendencia de estas cuentas a enfocarse en temas de identidad y justicia social. Kanye West, identificado aquí como “kanye”, también aparece en este segmento, posiblemente reflejando discusiones sobre sus declaraciones políticas y sociales controvertidas.

  • En contraste, términos como “meryl” y “taylor” en el eje de RightTroll podrían indicar que este grupo dirige su atención a criticar o discutir sobre celebridades que han tomado posiciones públicas que son percibidas como contrarias a sus valores conservadores.

Las diferencias en la frecuencia de palabras sugieren que, aunque hay temas comunes que ambos grupos discuten, la manera y el contexto en que se abordan estos temas varían.

3.7 Contraste de Palabras entre RightTroll y LeftTroll

# Cálculo y Visualización de Log Odds Ratios
word_ratios <- tokens_celebridades %>%
  filter(!str_detect(word, "^@")) %>%
  filter(account_category %in% c("LeftTroll", "RightTroll")) %>%
  count(word, account_category) %>%
  group_by(word) %>%
  filter(n >= 100) %>%
  ungroup() %>%
  pivot_wider(names_from = account_category, values_from = n, values_fill = list(n = 0)) %>%
  mutate(across(c(LeftTroll, RightTroll), ~(. + 1) / (sum(.) + 1))) %>%
  mutate(logratio = log(RightTroll / LeftTroll)) %>%
  arrange(desc(logratio))

word_ratios %>%
  group_by(logratio < 0) %>%
  slice_max(abs(logratio), n = 30) %>% 
  ungroup() %>%
  mutate(word = reorder(word, logratio)) %>%
  ggplot(aes(x = word, y = logratio, fill = logratio < 0)) +
  geom_col(show.legend = FALSE) +
  coord_flip() +
  labs(y = "log odds ratio (Right/Left)", x = NULL) +
  scale_fill_manual(name = "", values = c("blue", "red"), labels = c("Left", "Right")) +
  theme_minimal()

Observamos que términos relacionados con figuras y temáticas políticas, como “eminem” y “antitrump”, se inclinan hacia LeftTroll. Esto sugiere que dichas cuentas podrían centrarse en discusiones anti-Trump, posiblemente debido a la naturaleza progresista o liberal asociada con estas figuras o temáticas.

En contraste, palabras como “trump”, “celebs”, y “taylor” muestran una mayor asociación con RightTroll, lo que podría reflejar una tendencia a discutir o apoyar a Donald Trump y criticar a las celebridades que se oponen a él, como Taylor Swift.

Es importante destacar que la presencia de palabras como “kanye”, “west”, y “kaepernick” en la categoría de LeftTroll, y “beyonce”, “hillary”, y “black” en RightTroll, señala cómo los temas de raza, política y figuras públicas son abordados diferencialmente por cada grupo.

Dada la prevalencia de las categorías LeftTroll y RightTroll en el conjunto de datos, a continuación, nos centraremos en analizar y discutir en profundidad estas dos etiquetas para comprender mejor las estrategias y motivaciones subyacentes.


4. Unigrama y Bigrama

load("conjunto_datos/datos_limpieza_celebridades.rda")

4.1 Análisis “LeftTroll”

4.1.1 Unigrama

# Seleccionar solo los tweets de la categoría "LeftTroll"
datos_left_troll <- subset(datos_limpieza_celebridades, account_category == "LeftTroll")

save(datos_left_troll,file = "conjunto_datos/datos_left_troll.rda")
# Crear el corpus para LeftTroll
corpus_left_troll <- quanteda::corpus(datos_left_troll$content)
# Asignar metadatos al corpus
docvars(corpus_left_troll, "account_category") <- datos_left_troll$account_category
docvars(corpus_left_troll, "language") <- datos_left_troll$language
docvars(corpus_left_troll, "publish_date") <- datos_left_troll$publish_date
docvars(corpus_left_troll, "author") <- datos_left_troll$author
docvars(corpus_left_troll, "region") <- datos_left_troll$region
docvars(corpus_left_troll, "post_type") <- datos_left_troll$post_type
# Crear tokens del corpus
tokens_left_troll <- quanteda::tokens(corpus_left_troll, 
                                      remove_numbers = TRUE, 
                                      remove_punct = TRUE, 
                                      remove_symbols = TRUE, 
                                      remove_separators = TRUE, 
                                      remove_url = TRUE)

# Eliminar stopwords
tokens_left_troll <- tokens_select(tokens_left_troll, 
                                   pattern = stopwords("en"), 
                                   selection = "remove")

# Crear una matriz de términos documentales 
dfm_left_troll <- dfm(tokens_left_troll)

# Analizar las palabras más frecuentes
top_words_left_troll <- topfeatures(dfm_left_troll, 100)
print(top_words_left_troll)
##     beyonce       kanye       colin       black  kaepernick      famous 
##        1342         524         386         378         371         353 
##    kendrick        west       lamar      chance celebrities      rapper 
##         271         258         245         208         207         207 
##       trump    williams      serena       james      lebron      people 
##         188         168         152         151         149         140 
##       oprah        tour       swift      celebs       world       white 
##         134         130         112         107         105         104 
##      taylor       music       video       album       women     playing 
##         101         100          98          96          95          93 
##          ft        lady         jay       watch        love        dave 
##          89          83          83          82          81          76 
##     dancers        game        time     natural        hair   president 
##          73          73          68          68          66          65 
##         kid   chappelle       super      police        feat        keys 
##          65          62          62          60          58          57 
##        bowl      donald        gaga      alicia     america    panthers 
##          57          56          56          56          56          56 
##         day       drake         lil     protest        told         kim 
##          56          55          55          54          54          54 
##      eminem       obama     support       party         dex        song 
##          54          53          52          52          51          50 
##          gt    halftime       chris       money     tonight        save 
##          50          50          50          49          48          47 
##  kardashian   announced       meryl    american        damn        free 
##          47          46          45          45          44          43 
##       woman     dressed      listen         red     tickets      coming 
##          43          42          42          41          41          41 
##     panther performance        week     country      streep      forget 
##          41          41          41          40          39          39 
##      martin distraction   formation         tax       yeezy       water 
##          39          39          39          38          38          38 
##        post      speech        life     lobster 
##          38          38          37          37
# Generar y guardar una nube de palabras para las palabras más frecuentes
png(filename="imagenes/left_troll_wordcloud_1.png", width=3000, height=3000, bg = "black")

set.seed(100)
textplot_wordcloud(dfm_left_troll, 
                   min_count = 10, 
                   random_order = FALSE, 
                   rotation = 0.25,
                   color = RColorBrewer::brewer.pal(8, "Set3"), 
                   background = "black") 

dev.off()
## png 
##   2
left_troll_wordcloud_1

left_troll_wordcloud_1

La frecuencia de palabras encontradas en el análisis de unigramas de la categoría “LeftTroll” revela una selección de términos altamente relevante para entender las dinámicas de discusión y los temas predominantes impulsados por los trolls, especialmente en el contexto de eventos políticos y sociales claves entre 2016 y 2018, que era donde más tweets se habían publicado como vimos en el punto 3.4.

Beyoncé se posiciona en la cima con 1342 menciones, lo que subraya su papel como figura central en el debate político y social. Su activismo, especialmente en relación con los derechos de las mujeres y el movimiento Black Lives Matter, junto con su influencia cultural masiva, la convierten en una figura emblemática para ser utilizada en discursos que buscan resonar o movilizar opiniones en la esfera pública.

Kanye West y Colin Kaepernick siguen en frecuencia de menciones con 524 y 386 respectivamente, indicando su relevancia en las discusiones impulsadas por estos actores. La controversia generada por Kanye West debido a sus declaraciones políticas, incluido su apoyo a Donald Trump, y la protesta de Colin Kaepernick contra la injusticia racial al arrodillarse durante el himno nacional de EE. UU., son eventos que indudablemente marcaron puntos de inflexión en el discurso público, proporcionando a los trolls un contenido rico para explotar y amplificar.

La presencia de palabras como black, famous, y trump dentro de los términos más frecuentes refleja no solo la focalización en la identidad racial y la celebridad, sino también la polarización política.

La inclusión de president junto con trump destaca el enfoque significativo en la política y, en particular, en la figura de Donald Trump. Dada la temporalidad del dataset, que incluye las elecciones presidenciales de 2016 en EE. UU. y sus secuelas, no es sorprendente ver estos términos dominando el discurso. Resaltan cómo las figuras públicas y los eventos políticos se entrelazan en la estrategia de los trolls para, seguramente, influir en el discurso público.

4.1.2 Bigrama

# Crear bigramas
tokens_bigrams_left_troll <- tokens_ngrams(tokens_left_troll, n = 2)

# Crear una matriz de términos documentales para bigramas
dfm_bigrams_left_troll <- dfm(tokens_bigrams_left_troll)

# Analizar las palabras más frecuentes en bigramas
top_bigrams_left_troll <- topfeatures(dfm_bigrams_left_troll, 100)
print(top_bigrams_left_troll)
##     colin_kaepernick           kanye_west       kendrick_lamar 
##                  367                  246                  245 
##        chance_rapper      serena_williams         lebron_james 
##                  192                  149                  141 
##         taylor_swift       dave_chappelle            lady_gaga 
##                   83                   62                   56 
##          alicia_keys        women_natural         hair_beyonce 
##                   56                   56                   56 
##           super_bowl         natural_hair           famous_dex 
##                   56                   55                   51 
##        beyonce_black       black_panthers         donald_trump 
##                   47                   44                   43 
##         beyonce_told      beyonce_dancers        black_panther 
##                   43                   43                   41 
##         meryl_streep         kid_kendrick       announced_tour 
##                   39                   38                   38 
##          red_lobster             told_red         lobster_save 
##                   37                   36                   36 
##           save_money           money_tour         tour_tickets 
##                   36                   36                   36 
##           world_tour       kim_kardashian          beyonce_jay 
##                   36                   36                   31 
##      dancers_dressed        dressed_black        oprah_winfrey 
##                   30                   30                   30 
##    black_celebrities     beyonce_halftime          tax_returns 
##                   30                   29                   28 
##          water_flint            lil_wayne halftime_distraction 
##                   28                   28                   28 
##   distraction_notice          notice_game           game_fixed 
##                   28                   28                   28 
##    beyonce_announced          tour_forget         forget_water 
##                   27                   27                   27 
##        panther_party     police_brutality          party_super 
##                   26                   25                   25 
##      michael_jackson      beyonce_brought       beyonce_backup 
##                   24                   24                   24 
##       backup_dancers        dancers_black               ft_lil 
##                   24                   24                   24 
##      hillary_clinton         chris_martin        brought_music 
##                   23                   23                   23 
##         music_people           people_fit             fit_love 
##                   23                   23                   23 
##             love_bit       beyonce_coming          ft_kendrick 
##                   23                   22                   22 
##       playing_famous        paying_homage    running_president 
##                   22                   21                   21 
##      beyonce_beyonce            type_beat            dj_khaled 
##                   21                   20                   19 
##         black_celebs          lol_beyonce       beyonce_lowkey 
##                   19                   19                   18 
##        lowkey_paying          homage_late         late_michael 
##                   18                   18                   18 
##         black_people         jimmy_fallon    beyonce_formation 
##                   18                   18                   18 
##           coming_tax      tour_commercial     commercial_super 
##                   17                   17                   17 
##          bowl_sunday       sunday_beyonce      beyonce_running 
##                   17                   17                   17 
##      president_fired     fired_management      management_team 
##                   17                   17                   17 
##        team_campaign       campaign_staff     kardashian_kanye 
##                   17                   17                   17 
##         beyonce_fell         fell_bitches      bitches_trippin 
##                   17                   17                   17 
##      national_anthem          jay_beyonce         world_famous 
##                   17                   16                   16 
##      ellen_degeneres 
##                   16
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/left_troll_wordcloud_2.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_bigrams_left_troll, 
                   min_count = 10, 
                   random_order = FALSE, 
                   rotation = 0.25, 
                   color = RColorBrewer::brewer.pal(8, "Set3"), 
                   background = "black")

dev.off()
## png 
##   2
left_troll_wordcloud_2

left_troll_wordcloud_2

El análisis de bigramas para la categoría “LeftTroll” arroja luz sobre combinaciones de palabras que profundizan nuestro entendimiento sobre los temas específicos y las figuras públicas que dominaron el discurso de estos actores en Twitter. Al examinar estos bigramas, se revela una estructura más compleja y dirigida del contenido diseminado por los trolls.

Colin Kaepernick y Kanye West emergen nuevamente con 367 y 246 menciones respectivamente, esta vez en combinación con sus nombres completos, reiterando su papel central en las controversias políticas y sociales.

Las menciones a Serena Williams, LeBron James, y Taylor Swift indican cómo los logros, las posiciones políticas y la influencia social de estas celebridades son utilizados para tejer narrativas específicas o para comentar sobre temas de relevancia cultural y social.

Los bigramas “super bowl”, “natural hair”, y “black panthers” apuntan a eventos culturales significativos y temas de identidad racial.

Por último, la presencia de bigramas que combinan el nombre de Beyoncé con varios términos (“hair beyonce”, “beyonce black”, “beyonce told”) ilustra cómo se le atribuye un papel multifacético en el discurso, desde símbolo de empoderamiento hasta agente de cambio social.

4.2 Análisis “RightTroll”

4.2.1 Unigrama

# Seleccionar solo los tweets de la categoría "RightTroll"
datos_right_troll <- subset(datos_limpieza_celebridades, account_category == "RightTroll")

# Guardar el subconjunto para análisis futuro
save(datos_right_troll, file = "conjunto_datos/datos_right_troll.rda")
# Crear el corpus para RightTroll
corpus_right_troll <- quanteda::corpus(datos_right_troll$content)
# Asignar metadatos al corpus
docvars(corpus_right_troll, "account_category") <- datos_right_troll$account_category
docvars(corpus_right_troll, "language") <- datos_right_troll$language
docvars(corpus_right_troll, "publish_date") <- datos_right_troll$publish_date
docvars(corpus_right_troll, "author") <- datos_right_troll$author
docvars(corpus_right_troll, "region") <- datos_right_troll$region
docvars(corpus_right_troll, "post_type") <- datos_right_troll$post_type
# Crear tokens del corpus
tokens_right_troll <- quanteda::tokens(corpus_right_troll,
                                       remove_numbers = TRUE,
                                       remove_punct = TRUE,
                                       remove_symbols = TRUE,
                                       remove_separators = TRUE,
                                       remove_url = TRUE) %>%
                      tokens_select(pattern = stopwords("en"), selection = "remove")

# Eliminar stopwords
tokens_right_troll <- tokens_select(tokens_right_troll, 
                                   pattern = stopwords("en"), 
                                   selection = "remove")

# Crear una matriz de términos documentales 
dfm_right_troll <- dfm(tokens_right_troll)

# Analizar las palabras más frecuentes
top_words_right_troll <- topfeatures(dfm_right_troll, 100)
print(top_words_right_troll)
##           trump     celebrities          celebs           colin          famous 
##             643             459             422             416             404 
##      kaepernick          eminem           swift            west           james 
##             401             253             227             219             217 
##           kanye          lebron       antitrump           video           meryl 
##             191             190             174             170             159 
##          streep         beyonce           jimmy            lady          fallon 
##             145             137             135             134             133 
##       president          taylor           oprah            gaga       hollywood 
##             130             128             128             125             119 
##        breaking             lol           calls          people           black 
##             113             103              97              96              93 
##          remain          silent         unloads            news           women 
##              87              86              86              86              86 
##           obama             wow           allen          attack       weinstein 
##              86              83              82              81              75 
##           blame charlottesville       triggered           world        destroys 
##              73              72              72              72              72 
##        meltdown        claiming          trumps         hillary            love 
##              70              70              70              69              64 
##     kaepernicks          singer           lives        response           tweet 
##              63              61              57              57              57 
##            rant            kill          claims          donald           woman 
##              57              56              56              54              53 
##         perfect            play              jr         praises          lyrics 
##              53              53              53              52              52 
##             rap          harvey       flashback        compares         accused 
##              51              51              51              51              50 
##          tweets             run            dumb         winfrey            game 
##              50              50              50              49              49 
##           white           nfler             mlk          rapper        liberals 
##              48              48              48              47              47 
##            fake          giving          awards          herpes             joe 
##              45              45              43              42              42 
##            epic            vote         america          serena    presidential 
##              42              41              41              40              39 
##         biggest        williams       degeneres              fk           ellen 
##              38              38              38              38              37 
##           media         support           scott           marry         liberal 
##              37              37              37              37              36
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/right_troll_wordcloud_1.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_right_troll, 
                   min_count = 10, 
                   random_order = FALSE, 
                   rotation = 0.25, 
                   color = RColorBrewer::brewer.pal(8, "Set3"), 
                   background = "black")

dev.off()
## png 
##   2
right_troll_wordcloud_1

right_troll_wordcloud_1

En el análisis de bigramas para la categoría “RightTroll”, se observa una clara inclinación hacia temas políticos y sociales específicos, evidenciando la utilización de ciertas figuras y eventos para reforzar narrativas divisivas.

La presencia repetida de “Colin Kaepernick” y “Kanye West”, junto con “Kendrick Lamar” y “Chance the Rapper”, refleja el foco en personalidades asociadas tanto con la crítica social como con el apoyo a Trump.

La mención de “Serena Williams”, “LeBron James”, y “Taylor Swift” sugiere una estrategia de focalización en celebridades que han asumido roles activos en cuestiones sociales o políticas. Este enfoque podría tener el propósito de criticar o deslegitimar sus posturas, especialmente considerando el contexto de polarización en el que operan estos trolls.

Curiosamente, Beyoncé aparece menos en este análisis comparado con el de “LeftTroll”. Esto podría indicar una selección estratégica de figuras públicas basada en su relevancia para la narrativa política que los “RightTroll” desean promover o criticar.

Los bigramas como “Donald Trump” y “AntiTrump”, reflejan directamente la polarización política, destacando tanto el apoyo como la oposición al entonces presidente. La mención de “Charlottesville” evoca el trágico evento que se convirtió en un punto crítico de debate nacional sobre el racismo, la supremacía blanca y la respuesta del presidente Trump al mismo. El aumento en la actividad de los RightTroll hacia finales de 2017, como se observó en las tendencias temporales de actividad, punto 3.4, podría estar directamente relacionado con las narrativas que surgieron después de la manifestación de Charlottesville y la respuesta de Trump. Es probable que este evento haya sido utilizado por las cuentas de trolls para amplificar el discurso divisivo y comentar la reacción de Trump desde varios ángulos.

4.2.2 Bigrama

# Crear bigramas
tokens_bigrams_right_troll <- tokens_ngrams(tokens_right_troll, n = 2)

# Crear una matriz de términos documentales para bigramas
dfm_bigrams_right_troll <- dfm(tokens_bigrams_right_troll)

# Analizar las palabras más frecuentes en bigramas
top_bigrams_right_troll <- topfeatures(dfm_bigrams_right_troll, 100)
print(top_bigrams_right_troll)
##       colin_kaepernick           lebron_james           meryl_streep 
##                    351                    189                    143 
##           jimmy_fallon             kanye_west           taylor_swift 
##                    131                    130                    126 
##              lady_gaga            west_remain          remain_silent 
##                    124                     86                     86 
##         silent_unloads          unloads_colin             allen_west 
##                     86                     86                     81 
##            blame_trump  trump_charlottesville      celebrities_blame 
##                     71                     71                     70 
## charlottesville_attack        celebs_meltdown      meltdown_claiming 
##                     70                     68                     68 
##         claiming_trump       hollywood_celebs       triggered_celebs 
##                     68                     64                     63 
##      colin_kaepernicks         antitrump_rant            james_calls 
##                     63                     52                     49 
##       famous_antitrump       antitrump_singer          oprah_winfrey 
##                     48                     48                     48 
##              wow_trump         nfler_compares         compares_colin 
##                     48                     48                     48 
##         kaepernick_mlk                 mlk_jr        response_eminem 
##                     48                     48                     47 
##          perfect_tweet           donald_trump         singer_accused 
##                     47                     43                     42 
##         accused_giving           giving_women           women_herpes 
##                     42                     42                     42 
##        serena_williams        ellen_degeneres          grandmas_play 
##                     37                     37                     36 
##              play_epic              epic_game              game_kill 
##                     36                     36                     36 
##             kill_marry               marry_fk           fk_featuring 
##                     36                     36                     36 
##       featuring_famous        breaking_famous         celebs_biggest 
##                     36                     31                     30 
##      biggest_purveyors         purveyors_fake              fake_news 
##                     30                     30                     30 
##        trump_supporter            puerto_rico       harvey_weinstein 
##                     28                     27                     27 
##            calls_trump           celebs_emmys       presidential_run 
##                     26                     26                     26 
##           eminem_calls             bash_trump     degeneres_declares 
##                     26                     25                     25 
##         declares_trump        calls_president           trump_voters 
##                     25                     25                     25 
##            gun_control      celebrities_lives               kid_rock 
##                     25                     25                     25 
##           claims_oprah            james_woods              lol_ellen 
##                     25                     24                     24 
##        trump_dangerous      breaking_unhinged        unhinged_lebron 
##                     24                     24                     24 
##          president_bum           trump_lebron             lol_pelosi 
##                     24                     24                     24 
##        pelosi_butchers          butchers_hell             hell_colin 
##                     24                     24                     24 
##              lol_video             video_dems             dems_claim 
##                     24                     24                     24 
##           claim_lebron        james_president      voters_uneducated 
##                     24                     24                     24 
##          winfrey_hints     hints_presidential            gaga_tweets 
##                     24                     24                     24 
##            tweets_dumb            dumb_theory           theory_trump 
##                     24                     24                     24 
##          trump_ignores         ignores_puerto         lowinfo_celebs 
##                     24                     24                     24 
##    celebs_hypocritical hypocritical_meltdowns          meltdowns_gun 
##                     24                     24                     24 
##       photoshop_master 
##                     24
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/right_troll_wordcloud_2.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_bigrams_right_troll, 
                   min_count = 10, 
                   random_order = FALSE, 
                   rotation = 0.25, 
                   color = RColorBrewer::brewer.pal(8, "Set3"), 
                   background = "black") 

dev.off()
## png 
##   2
right_troll_wordcloud_2

right_troll_wordcloud_2

Colin Kaepernick y LeBron James siguen sobresaliendo, con 351 y 189 menciones respectivamente, lo que subraya cómo estas figuras deportivas, conocidas por sus posturas políticas y sociales, son frecuentemente citadas en debates sobre patriotismo, activismo y justicia racial.

La mención a “Charlottesville” sigue siendo significativa, mostrandose en varios bigramas. Los bigramas “blame Trump” y “Charlottesville attack” pueden reflejar intentos de criticar la reacción de Trump o de utilizar el evento para fomentar narrativas divisivas.

El análisis revela un uso estratégico de bigramas como “remain silent”, “silent unloads”, y “unloads Colin”, que podrían estar enfocados en criticar la percepción de hipocresía o inacción de ciertas celebridades ante temas controversiales, o en subrayar la activa participación de algunas en debates políticos.

“Antitrump rant”, “famous antitrump”, y “presidential run” resaltan cómo se utilizan estas plataformas para abordar directamente la oposición a Trump, resaltando las críticas de celebridades a su administración o especulaciones sobre posibles candidaturas contra él. La aparició de “antitrump_singer” también es interesante ya que muchas celebridades, sobretodo los que hicieron más eco fueron cantantes, estaban en contra de trump y trump hizo muchos comentarios sobre los ataques que recibía.


5. Análisis de N-gramas y Modelado de Temas

5.1 Análisis “LeftTroll”

# Crear bigramas y trigramas
tokens_ngrams_left_troll <- tokens_ngrams(tokens_left_troll, n = 2:3)

# Crear una matriz de términos documentales para los n-gramas
dfm_ngrams_left_troll <- dfm(tokens_ngrams_left_troll)

# Analizar las palabras más frecuentes en n-gramas
top_ngrams_left_troll <- topfeatures(dfm_ngrams_left_troll, 200)
print(top_ngrams_left_troll)
##             colin_kaepernick                   kanye_west 
##                          367                          246 
##               kendrick_lamar                chance_rapper 
##                          245                          192 
##              serena_williams                 lebron_james 
##                          149                          141 
##                 taylor_swift               dave_chappelle 
##                           83                           62 
##                    lady_gaga                  alicia_keys 
##                           56                           56 
##                women_natural                 hair_beyonce 
##                           56                           56 
##                   super_bowl                 natural_hair 
##                           56                           55 
##           women_natural_hair         natural_hair_beyonce 
##                           55                           55 
##                   famous_dex                beyonce_black 
##                           51                           47 
##               black_panthers                 donald_trump 
##                           44                           43 
##                 beyonce_told              beyonce_dancers 
##                           43                           43 
##                black_panther                 meryl_streep 
##                           41                           39 
##                 kid_kendrick           kid_kendrick_lamar 
##                           38                           38 
##               announced_tour                  red_lobster 
##                           38                           37 
##                     told_red                 lobster_save 
##                           36                           36 
##                   save_money                   money_tour 
##                           36                           36 
##                 tour_tickets             beyonce_told_red 
##                           36                           36 
##             told_red_lobster             red_lobster_save 
##                           36                           36 
##           lobster_save_money              save_money_tour 
##                           36                           36 
##           money_tour_tickets                   world_tour 
##                           36                           36 
##               kim_kardashian                  beyonce_jay 
##                           36                           31 
##              dancers_dressed                dressed_black 
##                           30                           30 
##      beyonce_dancers_dressed        dancers_dressed_black 
##                           30                           30 
##       dressed_black_panthers                oprah_winfrey 
##                           30                           30 
##            black_celebrities             beyonce_halftime 
##                           30                           29 
##                  tax_returns                  water_flint 
##                           28                           28 
##                    lil_wayne         halftime_distraction 
##                           28                           28 
##           distraction_notice                  notice_game 
##                           28                           28 
##                   game_fixed beyonce_halftime_distraction 
##                           28                           28 
##  halftime_distraction_notice      distraction_notice_game 
##                           28                           28 
##            notice_game_fixed            beyonce_announced 
##                           28                           27 
##                  tour_forget                 forget_water 
##                           27                           27 
##       beyonce_announced_tour        announced_tour_forget 
##                           27                           27 
##            tour_forget_water           forget_water_flint 
##                           27                           27 
##                panther_party          black_panther_party 
##                           26                           26 
##             police_brutality                  party_super 
##                           25                           25 
##        beyonce_black_panther          panther_party_super 
##                           25                           25 
##             party_super_bowl              michael_jackson 
##                           25                           24 
##              beyonce_brought               beyonce_backup 
##                           24                           24 
##               backup_dancers                dancers_black 
##                           24                           24 
##       beyonce_backup_dancers                       ft_lil 
##                           24                           24 
##              hillary_clinton         backup_dancers_black 
##                           23                           23 
##                 chris_martin                brought_music 
##                           23                           23 
##                 music_people                   people_fit 
##                           23                           23 
##                     fit_love                     love_bit 
##                           23                           23 
##        beyonce_brought_music         brought_music_people 
##                           23                           23 
##             music_people_fit              people_fit_love 
##                           23                           23 
##                 fit_love_bit               beyonce_coming 
##                           23                           22 
##                  ft_kendrick            ft_kendrick_lamar 
##                           22                           22 
##               playing_famous           playing_famous_dex 
##                           22                           22 
##                paying_homage            running_president 
##                           21                           21 
##              beyonce_beyonce                    type_beat 
##                           21                           20 
##                    dj_khaled                 black_celebs 
##                           19                           19 
##                  lol_beyonce               beyonce_lowkey 
##                           19                           18 
##                lowkey_paying                  homage_late 
##                           18                           18 
##                 late_michael        beyonce_lowkey_paying 
##                           18                           18 
##         lowkey_paying_homage           paying_homage_late 
##                           18                           18 
##          homage_late_michael         late_michael_jackson 
##                           18                           18 
##                 black_people                 jimmy_fallon 
##                           18                           18 
##            beyonce_formation                   coming_tax 
##                           18                           17 
##           beyonce_coming_tax           coming_tax_returns 
##                           17                           17 
##              tour_commercial             commercial_super 
##                           17                           17 
##                  bowl_sunday               sunday_beyonce 
##                           17                           17 
##              beyonce_running              president_fired 
##                           17                           17 
##             fired_management              management_team 
##                           17                           17 
##                team_campaign               campaign_staff 
##                           17                           17 
##        world_tour_commercial        tour_commercial_super 
##                           17                           17 
##        commercial_super_bowl            super_bowl_sunday 
##                           17                           17 
##          bowl_sunday_beyonce       sunday_beyonce_running 
##                           17                           17 
##    beyonce_running_president      running_president_fired 
##                           17                           17 
##   president_fired_management        fired_management_team 
##                           17                           17 
##     management_team_campaign          team_campaign_staff 
##                           17                           17 
##             kardashian_kanye         kim_kardashian_kanye 
##                           17                           17 
##        kardashian_kanye_west                 beyonce_fell 
##                           17                           17 
##                 fell_bitches              bitches_trippin 
##                           17                           17 
##         beyonce_fell_bitches         fell_bitches_trippin 
##                           17                           17 
##              national_anthem                  jay_beyonce 
##                           17                           16 
##                 world_famous              ellen_degeneres 
##                           16                           16 
##                    drip_walk                   lil_yachty 
##                           16                           16 
##                ft_lil_yachty             lol_beyonce_told 
##                           16                           16 
##                support_colin                famous_people 
##                           15                           15 
##         hair_beyonce_beyonce            colin_kaepernicks 
##                           15                           15 
##                justin_bieber              kendrick_lamars 
##                           15                           15 
##             african_american              beyonce_concert 
##                           15                           15 
##                 social_media     support_colin_kaepernick 
##                           14                           14 
##                 famous_black                 white_people 
##                           14                           14 
##             fighting_justice                  black_power 
##                           14                           13 
##                  yeezy_boost                   grand_slam 
##                           13                           13 
##           beyonce_performing               blended_family 
##                           13                           12 
##                  playing_kid         playing_kid_kendrick 
##                           12                           12 
##               michelle_obama               angelina_jolie 
##                           12                           12 
##                 bruno_shades               shades_beyonce 
##                           12                           12 
##                 warrior_game         bruno_shades_beyonce 
##                           12                           12 
##               sneak_upstairs               upstairs_catch 
##                           12                           12 
##                     catch_ol                      ol_lady 
##                           12                           12 
##              lady_practicing           practicing_beyonce 
##                           12                           12 
##                 beyonce_fall         sneak_upstairs_catch 
##                           12                           12 
##            upstairs_catch_ol                catch_ol_lady 
##                           12                           12 
##           ol_lady_practicing      lady_practicing_beyonce 
##                           12                           12 
##      practicing_beyonce_fall               martin_wearing 
##                           12                           12
# Preparación y ajuste de modelos de temas
time1 <- Sys.time()

# Ajustar la matriz de términos documentales
quant_dfm_trimmed <- dfm_trim(dfm_ngrams_left_troll, min_termfreq = 10)

# Ajustar el modelo LDA
set.seed(100)
if (require(topicmodels)) {
   lda_fit <- LDA(convert(quant_dfm_trimmed, to = "topicmodels"), k = 6)
   terms(lda_fit, 5)
}
##      Topic 1           Topic 2                  Topic 3           
## [1,] "kendrick_lamar"  "tax_returns"            "colin_kaepernick"
## [2,] "serena_williams" "beyonce_backup"         "chance_rapper"   
## [3,] "taylor_swift"    "backup_dancers"         "lebron_james"    
## [4,] "women_natural"   "dancers_black"          "alicia_keys"     
## [5,] "hair_beyonce"    "beyonce_backup_dancers" "famous_dex"      
##      Topic 4          Topic 5           Topic 6       
## [1,] "kanye_west"     "super_bowl"      "beyonce_told"
## [2,] "dave_chappelle" "beyonce_dancers" "red_lobster" 
## [3,] "lady_gaga"      "beyonce_black"   "told_red"    
## [4,] "donald_trump"   "dancers_dressed" "lobster_save"
## [5,] "meryl_streep"   "dressed_black"   "save_money"
time2 <- Sys.time()
print(time2 - time1)
## Time difference of 4.602401 secs
# Crear una nube de palabras para cada tema del modelo LDA
lda_terms_matrix <- lda_fit@beta
class(lda_terms_matrix)
## [1] "matrix" "array"
dim(lda_terms_matrix)
## [1]   6 370
colnames(lda_terms_matrix) <- lda_fit@terms
# Establecer el archivo de salida para la nube de palabras
png(file="imagenes/LEFTTROLLS_ngrams_wordcloud.png",
    width=3600, height=3000, res=300, bg="black")

# Configurar el layout para visualizar múltiples gráficos en una sola imagen
par(mfrow=c(2, 3))

# Iterar a través de cada tema en la matriz de términos del modelo LDA
for (k in 1:6) { 
  
  topic_terms <- lda_terms_matrix[k, ]
  
  d <- data.frame(word = names(topic_terms), rank= rank(topic_terms))
  
  d <- d[order(-d$rank),]
  
  d$freq <- d$rank - max(d$rank) + 100

  pal2 <- RColorBrewer::brewer.pal(11, "Spectral")
  
  wordcloud(d$word, d$freq, scale=c(1.2, 0.05), max.words=200, random.order=FALSE, rot.per=0, colors=pal2, random.color=TRUE)
  
  title(main=paste("Tema", k), font=10, col.main="yellow")
}

# Cerrar el dispositivo de gráficos para guardar la imagen
dev.off()
## png 
##   2
LEFTTROLLS_ngrams_wordcloud

LEFTTROLLS_ngrams_wordcloud

La visualización de los temas a partir de bigramas y trigramas de la categoría “LeftTroll” revela distintos focos de interés y estrategias narrativas empleadas.

Tema 1: Concentra frases alrededor de “donald_trump”, lo que sugiere un enfoque crítico hacia el entonces presidente. La mención de “red_lobster” y “beyonce_told” podría estar vinculada a discusiones sobre la cultura y el entretenimiento, potencialmente satirizando a figuras públicas o eventos.

Tema 2: Incluye referencias a “beyonce_black” y “black_panther”, lo cual indica una conversación activa sobre representación racial y posiblemente discusiones sobre el éxito cinematográfico y cultural de “Black Panther”. “super_bowl” y “panther_party” sugieren discusiones sobre eventos deportivos importantes y celebraciones culturales.

Tema 3: Destacan los n-gramas “beyonce_halftime”, “announced_tour”, y “water_flint”, lo que apunta a temas de entretenimiento mezclados con asuntos de justicia social y crisis de salud pública, como la crisis del agua en Flint, Michigan.

Tema 4: Se centra en figuras individuales con gran cantidad de menciones, como “kanye_west” y “kendrick_lamar”, enfocándose en su música y posible influencia social. La repetición de términos como “black celebs” y “black women” en este conjunto sugiere que las discusiones no son solo sobre entretenimiento, sino que también tocan puntos más profundos de representación y justicia social.

Tema 5: Parece abordar el papel de las mujeres en la sociedad y en los medios, con énfasis en “serena_williams”, “lebron_james” (aunque es hombre, se le podría relacionar con temas de igualdad y justicia social), “women_natural” y “hair_beyonce”, lo que podría reflejar conversaciones sobre belleza natural y estándares sociales.

Tema 6: Se centra principalmente en los deportes y la justicia social con términos como “colin_kaepernick”, “chance_rapper” y “taylor_swift”. La mención de “running president” junto a “fired management” y la presencia de “hillary_clinton” sugiere la exploración de temas relacionados con las campañas presidenciales y los altos mandos políticos, posiblemente discutiendo los cambios políticos y las consecuencias de las elecciones. La repetición de “president fired” puede insinuar debates sobre destituciones o controversias en la gestión del gobierno.

Tema 6: Este tema destaca por su enfoque en la política y la justicia social, destacando la figura de “colin_kaepernick”, cuya protesta durante el himno nacional lo colocó en el centro del debate sobre la justicia racial. La inclusión de “chance_rapper” y “taylor_swift” sugiere una discusión sobre el papel de los famosos en la activación y apoyo de causas sociales y políticas.

5.2 Análisis “RightTroll”

# Crear bigramas y trigramas para RightTroll
tokens_ngrams_right_troll <- tokens_ngrams(tokens_right_troll, n = 2:3)

# Crear una matriz de términos documentales para los n-gramas de RightTroll
dfm_ngrams_right_troll <- dfm(tokens_ngrams_right_troll)

# Analizar las palabras más frecuentes en n-gramas de RightTroll
top_ngrams_right_troll <- topfeatures(dfm_ngrams_right_troll, 200)
print(top_ngrams_right_troll)
##                   colin_kaepernick                       lebron_james 
##                                351                                189 
##                       meryl_streep                       jimmy_fallon 
##                                143                                131 
##                         kanye_west                       taylor_swift 
##                                130                                126 
##                          lady_gaga                        west_remain 
##                                124                                 86 
##                      remain_silent                     silent_unloads 
##                                 86                                 86 
##                      unloads_colin                 west_remain_silent 
##                                 86                                 86 
##              remain_silent_unloads               silent_unloads_colin 
##                                 86                                 86 
##           unloads_colin_kaepernick                         allen_west 
##                                 86                                 81 
##                  allen_west_remain                        blame_trump 
##                                 81                                 71 
##              trump_charlottesville        blame_trump_charlottesville 
##                                 71                                 71 
##                  celebrities_blame             charlottesville_attack 
##                                 70                                 70 
##            celebrities_blame_trump       trump_charlottesville_attack 
##                                 70                                 70 
##                    celebs_meltdown                  meltdown_claiming 
##                                 68                                 68 
##                     claiming_trump           celebs_meltdown_claiming 
##                                 68                                 68 
##            meltdown_claiming_trump                   hollywood_celebs 
##                                 68                                 64 
##                   triggered_celebs          triggered_celebs_meltdown 
##                                 63                                 63 
##                  colin_kaepernicks                     antitrump_rant 
##                                 63                                 52 
##                        james_calls                 lebron_james_calls 
##                                 49                                 49 
##                   famous_antitrump                   antitrump_singer 
##                                 48                                 48 
##            famous_antitrump_singer                      oprah_winfrey 
##                                 48                                 48 
##                          wow_trump                     nfler_compares 
##                                 48                                 48 
##                     compares_colin                     kaepernick_mlk 
##                                 48                                 48 
##                             mlk_jr               nfler_compares_colin 
##                                 48                                 48 
##          compares_colin_kaepernick               colin_kaepernick_mlk 
##                                 48                                 48 
##                  kaepernick_mlk_jr                    response_eminem 
##                                 48                                 47 
##                      perfect_tweet                       donald_trump 
##                                 47                                 43 
##                     singer_accused                     accused_giving 
##                                 42                                 42 
##                       giving_women                       women_herpes 
##                                 42                                 42 
##           antitrump_singer_accused              singer_accused_giving 
##                                 42                                 42 
##               accused_giving_women                giving_women_herpes 
##                                 42                                 42 
##                    serena_williams                    ellen_degeneres 
##                                 37                                 37 
##                      grandmas_play                          play_epic 
##                                 36                                 36 
##                          epic_game                          game_kill 
##                                 36                                 36 
##                         kill_marry                           marry_fk 
##                                 36                                 36 
##                       fk_featuring                   featuring_famous 
##                                 36                                 36 
##                 grandmas_play_epic                     play_epic_game 
##                                 36                                 36 
##                     epic_game_kill                    game_kill_marry 
##                                 36                                 36 
##                      kill_marry_fk                 marry_fk_featuring 
##                                 36                                 36 
##                fk_featuring_famous                    breaking_famous 
##                                 36                                 31 
##                     celebs_biggest                  biggest_purveyors 
##                                 30                                 30 
##                     purveyors_fake                          fake_news 
##                                 30                                 30 
##           hollywood_celebs_biggest           celebs_biggest_purveyors 
##                                 30                                 30 
##             biggest_purveyors_fake                purveyors_fake_news 
##                                 30                                 30 
##                    trump_supporter                        puerto_rico 
##                                 28                                 27 
##                   harvey_weinstein                        calls_trump 
##                                 27                                 26 
##                       celebs_emmys                   presidential_run 
##                                 26                                 26 
##                       eminem_calls                         bash_trump 
##                                 26                                 25 
##                 degeneres_declares                     declares_trump 
##                                 25                                 25 
##           ellen_degeneres_declares           degeneres_declares_trump 
##                                 25                                 25 
##                    calls_president                       trump_voters 
##                                 25                                 25 
##                        gun_control                  celebrities_lives 
##                                 25                                 25 
##                           kid_rock                       claims_oprah 
##                                 25                                 25 
##                        james_woods                          lol_ellen 
##                                 24                                 24 
##                    trump_dangerous                lol_ellen_degeneres 
##                                 24                                 24 
##           declares_trump_dangerous                  breaking_unhinged 
##                                 24                                 24 
##                    unhinged_lebron                      president_bum 
##                                 24                                 24 
##           breaking_unhinged_lebron              unhinged_lebron_james 
##                                 24                                 24 
##              james_calls_president                calls_president_bum 
##                                 24                                 24 
##                       trump_lebron                   wow_trump_lebron 
##                                 24                                 24 
##                 trump_lebron_james                         lol_pelosi 
##                                 24                                 24 
##                    pelosi_butchers                      butchers_hell 
##                                 24                                 24 
##                         hell_colin                lol_pelosi_butchers 
##                                 24                                 24 
##               pelosi_butchers_hell                butchers_hell_colin 
##                                 24                                 24 
##             hell_colin_kaepernicks                          lol_video 
##                                 24                                 24 
##                         video_dems                         dems_claim 
##                                 24                                 24 
##                       claim_lebron                    james_president 
##                                 24                                 24 
##                     lol_video_dems                   video_dems_claim 
##                                 24                                 24 
##                  dems_claim_lebron                 claim_lebron_james 
##                                 24                                 24 
##             lebron_james_president                  voters_uneducated 
##                                 24                                 24 
##                  james_calls_trump                 calls_trump_voters 
##                                 24                                 24 
##            trump_voters_uneducated                      winfrey_hints 
##                                 24                                 24 
##                 hints_presidential                oprah_winfrey_hints 
##                                 24                                 24 
##         winfrey_hints_presidential             hints_presidential_run 
##                                 24                                 24 
##                        gaga_tweets                        tweets_dumb 
##                                 24                                 24 
##                        dumb_theory                       theory_trump 
##                                 24                                 24 
##                      trump_ignores                     ignores_puerto 
##                                 24                                 24 
##                   lady_gaga_tweets                   gaga_tweets_dumb 
##                                 24                                 24 
##                 tweets_dumb_theory                  dumb_theory_trump 
##                                 24                                 24 
##               theory_trump_ignores               trump_ignores_puerto 
##                                 24                                 24 
##                ignores_puerto_rico                     lowinfo_celebs 
##                                 24                                 24 
##                celebs_hypocritical             hypocritical_meltdowns 
##                                 24                                 24 
##                      meltdowns_gun        lowinfo_celebs_hypocritical 
##                                 24                                 24 
##      celebs_hypocritical_meltdowns         hypocritical_meltdowns_gun 
##                                 24                                 24 
##              meltdowns_gun_control                   photoshop_master 
##                                 24                                 24 
##                 master_hilariously             hilariously_photoshops 
##                                 24                                 24 
##             photoshops_celebrities       photoshop_master_hilariously 
##                                 24                                 24 
##      master_hilariously_photoshops hilariously_photoshops_celebrities 
##                                 24                                 24 
##       photoshops_celebrities_lives                      famous_rapper 
##                                 24                                 24 
##                    rapper_arrested                   arrested_custody 
##                                 24                                 24 
##                    custody_alleged                       alleged_rape 
##                                 24                                 24 
##             breaking_famous_rapper             famous_rapper_arrested 
##                                 24                                 24 
##            rapper_arrested_custody           arrested_custody_alleged 
##                                 24                                 24 
##               custody_alleged_rape                 juanita_broaddrick 
##                                 24                                 24 
##                   broaddrick_takes                       takes_lethal 
##                                 24                                 24 
##                        lethal_shot                         shot_meryl 
##                                 24                                 24 
##                    streep_clintons           juanita_broaddrick_takes 
##                                 24                                 24 
##            broaddrick_takes_lethal                  takes_lethal_shot 
##                                 24                                 24 
##                  lethal_shot_meryl                  shot_meryl_streep 
##                                 24                                 24 
##              meryl_streep_clintons                       cringe_video 
##                                 24                                 24 
##                       video_eminem                   eminem_antitrump 
##                                 24                                 24
# Preparación y ajuste de modelos de temas para RightTroll
time1 <- Sys.time()

# Ajustar la matriz de términos documentales de RightTroll
quant_dfm_trimmed <- dfm_trim(dfm_ngrams_right_troll, min_termfreq = 10)

# Ajustar el modelo LDA para RightTroll
set.seed(100)
if (require(topicmodels)) {
   lda_fit_right <- LDA(convert(quant_dfm_trimmed, to = "topicmodels"), k = 6)
   terms(lda_fit_right, 5)
}
##      Topic 1            Topic 2            Topic 3                   
## [1,] "kanye_west"       "colin_kaepernick" "celebs_meltdown"         
## [2,] "colin_kaepernick" "jimmy_fallon"     "meltdown_claiming"       
## [3,] "nfler_compares"   "lebron_james"     "claiming_trump"          
## [4,] "compares_colin"   "wow_trump"        "celebs_meltdown_claiming"
## [5,] "kaepernick_mlk"   "donald_trump"     "meltdown_claiming_trump" 
##      Topic 4                       Topic 5              Topic 6         
## [1,] "blame_trump"                 "taylor_swift"       "meryl_streep"  
## [2,] "trump_charlottesville"       "lebron_james"       "west_remain"   
## [3,] "blame_trump_charlottesville" "lady_gaga"          "remain_silent" 
## [4,] "celebrities_blame"           "james_calls"        "silent_unloads"
## [5,] "charlottesville_attack"      "lebron_james_calls" "unloads_colin"
time2 <- Sys.time()
print(time2 - time1)
## Time difference of 4.262943 secs
# Crear una nube de palabras para cada tema del modelo LDA para RightTroll
lda_terms_matrix_right <- lda_fit_right@beta

# Establecer los nombres de las columnas como los términos del modelo LDA de RightTroll
colnames(lda_terms_matrix_right) <- lda_fit_right@terms

# Configurar el archivo de salida y el layout para la nube de palabras de RightTroll
png(file="imagenes/RIGHTTROLLS_ngrams_wordcloud.png", width=3600, height=3000, res=300, bg="black")
par(mfrow=c(2, 3))

# Iterar a través de cada tema en la matriz de términos del modelo LDA para RightTroll
for (k in 1:6) { 
  
  topic_terms <- lda_terms_matrix_right[k, ]
  
  d <- data.frame(word = names(topic_terms), rank= rank(topic_terms))
  
  d <- d[order(-d$rank),]
  
  d$freq <- d$rank - max(d$rank) + 100

  pal2 <- RColorBrewer::brewer.pal(11, "Spectral")
  
  wordcloud(d$word, d$freq, scale=c(1.0, 0.05), max.words=200, random.order=FALSE, rot.per=0, colors=pal2, random.color=TRUE)
  
  title(main=paste("Tema", k), font=10, col.main="yellow")
}

# Cerrar el dispositivo de gráficos para guardar la imagen
dev.off()
## png 
##   2
RIGHTTROLLS_ngrams_wordcloud

RIGHTTROLLS_ngrams_wordcloud

Tema 1: Se destaca un enfoque significativo en el activismo de Colin Kaepernick y las reacciones ante el incidente de Charlottesville, con términos como “blame_trump” y “trump_charlottesville”. El bigrama “celebrities_blame” sugiere que las figuras públicas han responsabilizado a Trump por su manejo del evento, mientras que “black_woman_dumb” podría representar una narrativa despectiva. La constante mención de Eminem, especialmente en contextos antitrump como “eminem_rapped_black” y “antitrump_eminem”, indica la explotación de las posturas políticas de las celebridades para reforzar la retórica divisiva.

Tema 2: Aquí, los términos como “presidential_run” y las frecuentes referencias a Kaepernick reflejan la atención a las figuras que se destacaron durante las elecciones presidenciales y los debates políticos nacionales, probablemente subrayando tanto las candidaturas como los desafíos a la autoridad presidencial.

Tema 3: Se observa un enfoque en el escándalo de Harvey Weinstein y su impacto en la cultura de Hollywood, con expresiones como “joked_weinstein_sexual”, “oscars_joked_weinstein”, y “weinstein_sexual_predator”. Este tema puede reflejar discusiones sobre el abuso sexual y el poder en la industria del entretenimiento, así como el nacimiento del movimiento #MeToo.

Tema 4: Este conjunto de palabras parece girar en torno a las reacciones de las celebridades y las acusaciones contra “harvey_weinstein”. El tema también destaca la crítica social y las respuestas a estas acusaciones, como se ve en “ellen_degeneres_declares”, “jimmy_fallon”, y “oprah_claims”. Las combinaciones “trump_ignores_puerto_rico” y “tweets_dumb” podrían reflejar críticas hacia la administración Trump y su manejo de crisis, así como una percepción negativa de la retórica en las redes sociales.

Tema 5: La presencia de términos como “antitrump_bandwagon” sugiere críticas a las actitudes anti-Trump y la exploración de cómo la sociedad y las celebridades responden y se alinean en contra de sus políticas o declaraciones.

Tema 6: Con la mención de “allen_west_remain” y “remain_silence”, este tema parece concentrarse en la expectativa de pronunciamientos políticos y la crítica a quienes eligen no hablar sobre temas importantes, destacando la presión y la crítica hacia aquellos que permanecen en silencio frente a la injusticia o la controversia política.


El análisis de los tokens más destacados en nuestro dataset podemos intuir que la publicación de estos tweets fuerse probablemente para causar discusión y debate en Twitter. Para profundizar en la comprensión del impacto emocional y el peso de estos temas, vamos a llevar a cabo un Análisis de Sentimientos, esencial para evaluar no solo el contenido explícito sino también la subjetividad y la influencia potencial de estos mensajes en el clima político de ese entonces.

6. Análisis de Sentimineto

6.1 Análisis “LeftTroll”

# Cargar el conjunto de datos de LeftTroll
load("conjunto_datos/datos_left_troll.rda")

# Añadir un identificador único a cada tweet en el conjunto de datos de LeftTroll
datos_left_troll <- datos_left_troll %>%
  mutate(tweet_id = row_number())

# Dividir los tweets en palabras y crear un conjunto de datos 'tidy'
ds_tweets_tidy <- datos_left_troll %>% 
  unnest_tokens(word, content)

# Realizar un análisis de sentimientos en los tweets
tweets_sentiment <- ds_tweets_tidy %>% 
  inner_join(get_sentiments("afinn"), by = "word") %>%
  inner_join(datos_left_troll %>% select(tweet_id, content), by = "tweet_id") %>%
  group_by(doc_id = tweet_id) %>% 
  summarise(
    sentiment = sum(value),
    text = first(content)
  ) %>%
  ungroup() %>%
  arrange(sentiment) 

# Mostrar los resultados 
View(tweets_sentiment)
# Crear el gráfico de barras (histograma) para visualizar la distribución del sentimiento
ggplot(data = tweets_sentiment, aes(x = sentiment)) + 
  geom_histogram(binwidth = 1, color = 'darkslategray', fill = 'steelblue') + 
  xlab("Puntuación de Sentimiento") + 
  ylab("Cantidad de Tweets") + 
  ggtitle("Distribución de Sentimientos en Tweets")

La distribución de la puntuación de sentimientos para los tweets clasificados como LeftTroll revela una tendencia interesante hacia las emociones neutras a ligeramente positivas, con una prominente concentración alrededor del valor cero. Sin embargo, también observamos una mayor cantidad de tweets con sentimientos positivos lo que sugiere expresiones de apoyo o afirmación. Esta distribución podría indicar una táctica de comunicación que, si bien incluye críticas o desacuerdos, también enfatiza mensajes de solidaridad o aprobación.

Procederemos a analizar los textos de algunos tweets para comprender mejor los contextos y temas específicos que están impulsando estas reacciones:

6.1.1 LeftTroll Sentiment Negative

LeftTroll_Negative_Sentiment

LeftTroll_Negative_Sentiment

LeftTroll_Negative_Sentiment

LeftTroll_Negative_Sentiment

Los temas principales abordados en los tweets negativos reflejan críticas fuertes y lenguaje agresivo centrado en figuras públicas y eventos sociales:

  1. Colin Kaepernick y Activismo: Sentimientos adversos hacia Kaepernick, posiblemente por su protesta durante el himno nacional.
  2. Críticas a Kanye West: Expresiones negativas hacia Kanye, tal vez en respuesta a sus comentarios políticos o comportamientos controvertidos.
  3. Desaprobación de Donald Trump: Varios tweets muestran una clara condena a la figura de Trump, aludiendo a su impacto político.
  4. Comentarios hacia Beyoncé: Algunos tweets expresan sentimientos negativos hacia Beyoncé, quizás debido a su influencia en cuestiones de raza y género.
  5. Figuras Públicas y Fama: Tweets que critican la percepción de las celebridades en la sociedad, incluyendo acusaciones de hipocresía y crítica a su involucramiento en la política.
  6. Papel de las Celebridades en las Noticias: Comentarios que señalan la influencia de las celebridades en la difusión de información y su papel en el debate público.

6.1.2 LeftTroll Sentiment Positive

LeftTroll_Positive_Sentiment

LeftTroll_Positive_Sentiment

Por contraste, los sentimientos positivos reflejados en la muestra de tweets son indicativos de admiración, respeto y celebración de figuras culturales y logros. Aquí hay una visión general destacada:

  1. Colin Kaepernick es aclamado como un jugador inspirador y valiente, lo que sugiere una valoración positiva de su activismo y el efecto que ha tenido en el discurso público, especialmente en relación con la justicia social y la equidad racial.

  2. Serena Williams es alabada por su triunfo en el Australian Open, destacando el reconocimiento a su excepcional habilidad en el tenis y su estatus como un ícono en el deporte, lo que también tiene resonancia en discusiones sobre empoderamiento femenino y superación de barreras raciales.

  3. Beyoncé es mencionada de manera positiva, especialmente con referencia a su álbum “Lemonade”.

  4. LeBron James es objeto de felicitaciones y buenos deseos, subrayando su influencia tanto en el baloncesto como en su activismo fuera de la cancha, incluyendo su trabajo en el campo de la educación y los derechos civiles.

  5. Kanye West y Taylor Swift aparecen en contextos que, aunque a veces humorísticos, como las menciones junto a Trump, generalmente mantienen un tono positivo,.

6.1.3 Sentimientos a lo largo del tiempo

# Cargar el conjunto de datos previamente filtrado
load("conjunto_datos/datos_filtrados_celebridades.rda")

# Crear un corpus solo con el contenido de los tweets de LeftTroll
trolls <- corpus(datos_filtrados_celebridades$content[
  datos_filtrados_celebridades$account_category == "LeftTroll"])

# Asignar fechas de publicación a los documentos en el corpus como metadatos
docvars(trolls, "Fecha") <- datos_filtrados_celebridades$publish_date[datos_filtrados_celebridades$account_category == "LeftTroll"]

# Tokenizar el corpus
toks_trolls <- tokens(trolls)

# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary =  data_dictionary_LSD2015[1:2])

# Crear una matriz de términos documentales y agruparla por día
dfmat_gov_lsd <- dfm(toks_trolls_lsd) %>% 
  dfm_group(groups = Fecha)


# Crear un gráfico de líneas mostrando la evolución de las frecuencias a lo largo del tiempo
matplot(dfmat_gov_lsd$Fecha, 
        dfmat_gov_lsd, 
        type = "l", 
        lty = 1, 
        col = 1:2,
        ylab = "Frequency", 
        xlab = "")
grid()
legend("topleft", 
       col = 1:2, 
       legend = colnames(dfmat_gov_lsd), 
       lty = 1, 
       bg = "white")

# Filtrar por la categoría LeftTroll y el rango de fechas especificado
filtered_data <- subset(datos_filtrados_celebridades, 
                        account_category == "LeftTroll" & 
                        publish_date >= as.Date("2016-01-01") & 
                        publish_date <= as.Date("2016-12-31"))

# Crear un corpus solo con el contenido de los tweets de LeftTroll
trolls_corpus <- corpus(filtered_data$content, 
                        docvars = data.frame(Fecha = as.Date(filtered_data$publish_date)))

# Tokenizar el corpus
toks_trolls <- tokens(trolls_corpus)

# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary = data_dictionary_LSD2015[1:2])

# Crear una matriz de términos documentales
dfmat_lsd <- dfm(toks_trolls_lsd)

# Agrupar la matriz de términos documentales por fecha
dfmat_lsd_filtered <- dfm_group(dfmat_lsd, groups = docvars(toks_trolls, "Fecha"))

fechas_presentes <- docvars(dfmat_lsd_filtered, "Fecha")

# Graficar utilizando fechas_presentes
matplot(as.Date(fechas_presentes), 
        as.matrix(dfmat_lsd_filtered),
        type = "l", 
        lty = 1, 
        ylab = "Frecuencia", 
        xlab = "Fecha 2016")
title("Frecuencia de Sentimientos a lo Largo del Tiempo para 'LeftTroll'")
grid()
legend("topleft",
       legend = colnames(dfmat_lsd_filtered),
       col = 1:2, 
       lty = 1,
       )

Las dos gráficas presentan la distribución de sentimientos negativos y positivos a lo largo del tiempo, basada en los tweets de la categoría ‘LeftTroll’. La primera gráfica muestra la tendencia durante varios años, mientras que la segunda se centra en el año 2016, destacado por ser el año de las elecciones presidenciales de Estados Unidos, un período de intensa actividad política y social.

En la gráfica general, se observa una fluctuación constante entre sentimientos positivos y negativos a lo largo del tiempo, con picos que podrían corresponder a eventos específicos que generaron una gran cantidad de discusiones en Twitter. Los picos negativos pueden indicar respuestas a eventos controvertidos o desfavorables, mientras que los picos positivos podrían reflejar momentos de apoyo comunitario o reacciones a eventos positivos.

La segunda gráfica, que se centra en 2016, refleja con más detalle las fluctuaciones en la respuesta emocional de los usuarios durante un año particularmente polarizado. Vemos picos significativos en los sentimientos tanto positivos como negativos, lo que sugiere una respuesta intensa a los eventos de ese año. Estos podrían estar relacionados con las campañas electorales, debates, resultados de las elecciones y otros incidentes políticos o sociales significativos que captaron la atención pública.

El pico observado a inicios de octubre de 2016 en las gráficas podría atribuirse a varios eventos políticos cruciales. En esa época, las tensiones políticas en Estados Unidos alcanzaron niveles altos debido a la cercanía de las elecciones presidenciales. Específicamente, el 7 de octubre, se reveló un video de “Access Hollywood” con Donald Trump realizando comentarios vulgares sobre las mujeres. Esta filtración provocó un intenso debate público y una oleada de críticas, no solo en los medios tradicionales sino también en las plataformas sociales como Twitter. La atención aumentó considerablemente tanto de detractores como de defensores, generando una amplia gama de expresiones emocionales que podrían explicar el aumento de sentimientos registrados en Twitter, reflejo de la polarización y la pasión política del momento.

6.2 Análisis “RightTroll”

# Cargar el conjunto de datos de LeftTroll
load("conjunto_datos/datos_right_troll.rda")

# Añadir un identificador único a cada tweet en el conjunto de datos de LeftTroll
datos_right_troll <- datos_right_troll %>%
  mutate(tweet_id = row_number())

# Dividir los tweets en palabras y crear un conjunto de datos 'tidy'
ds_tweets_tidy <- datos_right_troll %>% 
  unnest_tokens(word, content)

# Realizar un análisis de sentimientos en los tweets
tweets_sentiment <- ds_tweets_tidy %>% 
  inner_join(get_sentiments("afinn"), by = "word") %>%
  inner_join(datos_right_troll %>% select(tweet_id, content), by = "tweet_id") %>%
  group_by(doc_id = tweet_id) %>% 
  summarise(
    sentiment = sum(value),
    text = first(content)
  ) %>%
  ungroup() %>%
  arrange(sentiment) 

# Mostrar los resultados 
View(tweets_sentiment)
# Crear el gráfico de barras (histograma) para visualizar la distribución del sentimiento
ggplot(data = tweets_sentiment, aes(x = sentiment)) + 
  geom_histogram(binwidth = 1, color = 'darkslategray', fill = 'steelblue') + 
  xlab("Puntuación de Sentimiento") + 
  ylab("Cantidad de Tweets") + 
  ggtitle("Distribución de Sentimientos en Tweets")

La gráfica que representa la distribución de sentimientos en los tweets categorizados como RightTroll destaca una preponderancia de sentimientos negativos, evidenciada por una agrupación sustancial de tweets con puntuaciones menores a cero. No obstante, también es notable la presencia de sentimientos positivos, con picos que podrían reflejar episodios de conformidad o respaldo dentro de un marco general de comentarios adversos.

Procederemos a analizar los textos de algunos tweets para comprender mejor los contextos y temas específicos que están impulsando estas reacciones:

6.2.1 RightTroll Sentiment Negative

RightTroll_Negative_Sentiment

RightTroll_Negative_Sentiment

La gráfica que presenta los tweets clasificados como “RightTroll” con sentimiento negativo exhibe una gama de temas punzantes que invitan a un examen más detallado:

  1. Colin Kaepernick: Persisten los comentarios adversos relacionados con Kaepernick y su protesta durante el himno nacional, reflejando la división de opiniones sobre su activismo.
  2. Reacción contra Donald Trump: A pesar de ser un ícono para muchos en la derecha, algunos tweets muestran descontento y crítica hacia Trump, destacando la complejidad de su figura.
  3. Meryl Streep y Hollywood: Tweets que implican una oposición a la politización de Hollywood y críticas hacia actores por sus opiniones políticas.
  4. Controversias de celebridades: Observamos una atención crítica a los escándalos de celebridades, poniendo en tela de juicio su conducta y la reacción del público.

6.2.2 RightTroll Sentiment Positive

RightTroll_Positive_Sentiment

RightTroll_Positive_Sentiment

RightTroll_Positive_Sentiment

RightTroll_Positive_Sentiment

Observando las imágenes proporcionadas para los tweets con sentimiento positivo clasificados como “RightTroll”, estos son los temas y contextos más destacados:

  1. Eminem y Taylor Swift: La atención está puesta en la reacción de ciertas celebridades a la política, específicamente en el caso de Eminem olvidando letras durante un acto crítico hacia Trump. Esta situación es ridiculizada, lo que revela una tendencia a menospreciar las posturas críticas de figuras del entretenimiento hacia el presidente, mostrando un claro sesgo a favor de la narrativa pro-Trump.

  2. Serena Williams: Resalta el reconocimiento y la celebración de los logros de Serena Williams en el deporte, lo que muestra un apoyo transversal a figuras públicas que, independientemente de su posición política, son vistas como íconos en sus respectivos campos.

  3. Apoyo a Decisiones Políticas: Hay tweets que muestran apoyo a las decisiones políticas de figuras conservadoras, criticando la oposición y las protestas lideradas por Colin Kaepernick, lo cual alinea con la narrativa conservadora y muestra un apoyo a las políticas y posiciones de Trump.

  4. LeBron James: La mención repetida de LeBron James en un contexto positivo podría sugerir una valoración favorable de sus acciones o declaraciones, posiblemente aquellas que puedan alinearse con o resuenan positivamente entre los seguidores conservadores.

  5. Celebración de Logros y Éxitos: En general, los tweets con alta puntuación de sentimiento positivo tienden a celebrar éxitos y logros de varias figuras públicas, ya sea en el contexto del deporte, la música, o la política. Esto refleja una selección estratégica de temas que fortalecen la narrativa y los valores del grupo identificado como RightTroll.

6.2.3 Sentimientos a lo largo del tiempo

# Cargar el conjunto de datos previamente filtrado
load("conjunto_datos/datos_filtrados_celebridades.rda")

# Crear un corpus solo con el contenido de los tweets de RightTroll
trolls <- corpus(datos_filtrados_celebridades$content[
  datos_filtrados_celebridades$account_category == "RightTroll"])

# Asignar fechas de publicación a los documentos en el corpus como metadatos
docvars(trolls, "Fecha") <- datos_filtrados_celebridades$publish_date[datos_filtrados_celebridades$account_category == "RightTroll"]

# Tokenizar el corpus
toks_trolls <- tokens(trolls)

# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary =  data_dictionary_LSD2015[1:2])

# Crear una matriz de términos documentales y agruparla por día
dfmat_gov_lsd <- dfm(toks_trolls_lsd) %>% 
  dfm_group(groups = Fecha)

# Crear un gráfico de líneas mostrando la evolución de las frecuencias a lo largo del tiempo
matplot(dfmat_gov_lsd$Fecha, 
        dfmat_gov_lsd, 
        type = "l", 
        lty = 1, 
        col = 1:2,
        ylab = "Frequency", 
        xlab = "")
grid()
legend("topleft", 
       col = 1:2, 
       legend = colnames(dfmat_gov_lsd), 
       lty = 1, 
       bg = "white")

# Filtrar por la categoría RightTroll y el rango de fechas especificado
filtered_data <- subset(datos_filtrados_celebridades, 
                        account_category == "RightTroll" & 
                        publish_date >= as.Date("2017-06-01") & 
                        publish_date <= as.Date("2017-12-31"))

# Crear un corpus solo con el contenido de los tweets de RightTroll
trolls_corpus <- corpus(filtered_data$content, 
                        docvars = data.frame(Fecha = as.Date(filtered_data$publish_date)))

# Tokenizar el corpus
tokens_trolls <- tokens(trolls_corpus)

# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
tokens_trolls_lsd <- tokens_lookup(tokens_trolls, dictionary = data_dictionary_LSD2015[1:2])

# Crear una matriz de términos documentales (dfm)
dfm_trolls_lsd <- dfm(tokens_trolls_lsd)

# Agrupar el dfm por la variable docvar de fecha creada anteriormente
dfm_trolls_grouped <- dfm_group(dfm_trolls_lsd, groups = docvars(trolls_corpus, "Fecha"))

# Obtener las fechas de los documentos del dfm agrupado
dates <- as.Date(docnames(dfm_trolls_grouped))

# Convertir dfm en una matriz para el plot
dfm_matrix <- as.matrix(dfm_trolls_grouped)

# Crear la gráfica con matplot
matplot(dates, 
        dfm_matrix, 
        type = "l", 
        lty = 1, 
        col = 1:2, 
        xlab = "Fecha 2017", 
        ylab = "Frecuencia", 
        main = "Frecuencia de Sentimientos a lo Largo del Tiempo para 'RightTroll'")
grid()
legend("topright", 
       legend = colnames(dfm_trolls_grouped), 
       col = 1:2, 
       lty = 1)

Las dos gráficas muestran la distribución de sentimientos negativos y positivos en los tweets categorizados como ‘RightTroll’. La primera ofrece una visión a largo plazo que abarca varios años, mientras que la segunda se enfoca en el año 2017, destacando períodos de especial actividad o eventos relevantes.

En la visión general, hay una predominancia clara de sentimientos negativos sobre los positivos, indicando una tendencia de las cuentas ‘RightTroll’ hacia un discurso más crítico o confrontativo en Twitter. Los picos en la gráfica pueden estar vinculados a reacciones a eventos políticos, culturales o sociales específicos, reflejando la rápida movilización de opiniones en la plataforma.

El gráfico detallado de 2017 muestra fluctuaciones considerables en la respuesta emocional, con un notable pico de sentimientos negativos a mediados de julio de 2017. Durante esa época, se estaba debatiendo intensamente la derogación y reemplazo de la Ley de Cuidado de Salud a Bajo Precio (Obamacare) en el Congreso de los Estados Unidos, lo que generó muchas discusiones polarizadas y emocionales en todo el país. Además, fue un verano marcado por tensiones políticas crecientes y preparativos para las manifestaciones de Charlottesville que ocurrirían en agosto, donde las divisiones nacionales se manifestaron de forma muy visible y violenta.


7. Conclusiones

En este estudio, hemos explorado cómo las cuentas de Twitter clasificadas como ‘RightTroll’ y ‘LeftTroll’ han utilizado las figuras de celebridades para lo que suponemos que era su intención de influir en el discurso público durante períodos claves, como las elecciones presidenciales de EE.UU. y otros eventos sociopolíticos importantes. A través del análisis de texto, la minería de tópicos y el modelado de temas, se ha evidenciado que estas cuentas han dirigido su enfoque hacia celebridades específicas y temas controversiales para amplificar la división y discusión.

Dinámica del Discurso: El análisis ha demostrado que las cuentas ‘LeftTroll’ tienden a enfocarse en temas de justicia social, derechos civiles y figuras políticas de izquierda, mientras que las cuentas ‘RightTroll’ suelen promover narrativas conservadoras y criticar a figuras públicas por sus posturas progresistas. Ambas usan tácticas de apropiación de la fama y la influencia de las celebridades para potenciar mensajes específicos y resonar en sus respectivas audiencias.

Patrones de Comunicación: Las cuentas categorizadas como ‘LeftTroll’ destacan por enfocarse en figuras como Beyoncé, Colin Kaepernick y Kanye West, conectando su presencia en el discurso público con temas predominantes como la justicia social y los movimientos de derechos civiles. Estas cuentas parecen promover un diálogo que resalta el activismo y la responsabilidad social de las celebridades, utilizando su influencia para resonar y movilizar opiniones en torno a asuntos progresistas. Ejemplos notables incluyen la mención frecuente de Kaepernick en el contexto de su protesta y el apoyo a Beyoncé, reflejando la valoración positiva de su activismo cultural y social.

Por el contrario, las cuentas ‘RightTroll’ se enfocan en construir una narrativa más crítica hacia las figuras públicas y sus posturas políticas. La atención a eventos como los sucesos de Charlottesville y las críticas hacia las posturas anti-Trump, especialmente en el caso de celebridades como Eminem o Taylor Swift, sugieren un esfuerzo por cuestionar y confrontar las opiniones que contravienen la ideología conservadora. Estas cuentas también se centraron en la figura de Donald Trump, tanto en apoyo como en crítica a la oposición que él enfrentaba, y en cómo las celebridades interactuaban con estos temas políticos.

En ambas categorías, términos como ‘Charlottesville’, ‘Kaepernick’, ‘West’, ‘Beyoncé’, y ‘anti-Trump’ emergen como núcleos temáticos recurrentes, indicando la tendencia a utilizar la influencia y visibilidad de las celebridades para dirigir la conversación pública y, posiblemente, para provocar polarización. A través de la repetición y la focalización en estos términos y figuras públicas, las cuentas de trolls buscan amplificar su alcance y la respuesta emocional del público.

Impacto Emocional: A través del análisis de sentimientos, se ha descubierto una predominancia de sentimientos negativos en las cuentas ‘RightTroll’, reflejando una estrategia de confrontación y crítica. Por otro lado, los ‘LeftTroll’ han demostrado una mezcla de sentimientos negativos y positivos, lo que podría indicar un enfoque más equilibrado que combina crítica con apoyo a sus causas.

Eventos Específicos y Movilización: La distribución temporal de la publicación de los tweets, el contenido de estos y el analisis de sentimientos muestra picos que corresponden a eventos políticos, como las elecciones y las manifestaciones de Charlottesville, subrayando cómo las cuentas de trolls se activan durante momentos de alta tensión para amplificar las narrativas divisivas.

Las acciones de las cuentas ‘RightTroll’ y ‘LeftTroll’ parecen reflejar una intención deliberada de polarizar el debate público y de influir en la opinión pública. El aprovechamiento de figuras públicas y la respuesta a eventos actuales parece que demuestran una estrategia orquestada para utilizar las redes sociales como un terreno de influencia.


8. Especial mención a …

8.1 Memes o Frases Virales

Siguiendo en la línea de cosas virales me encontré con el tema de los memes y las frases virales mientras buscaba un tema apropiado para el trabajo. Es fascinante observar cómo los memes y frases virales se han politizado en los últimos años, convirtiéndose en herramientas de burla durante campañas políticas como las de Trump y Hillary. Algunos de los principales memes que he explorado destacan por los comentarios y la narrativa que los rodea. Para un futuro proyecto también sería interesante investigar cómo los trolls intentaron influir utilizando estos memes.

Aunque para este proyecto he elegido enfocarme en el tema de las celebridades debido a su amplio alcance y potencial para la influencia, el estudio de los memes y frases virales también es un tema digno de investigación. Comento esto aquí por si también le resulta de interés para futuros proyectos de investigación.

Algunos ejemplos de términos que se usaron mucho y fueron virales para el filtrado son los siguientes:

load("conjunto_datos/datos_ingles_filtrados.rda")
# Definir términos de búsqueda
terminos_busqueda <- c("pepe the frog", "nasty woman", "covfefe", "bigly", "\\bmaga\\b", "lock her up", "build the wall", "alternative facts", "\\btan\\b", "trump.*dance|dance.*trump")

# Inicializar el contador total de tweets
total_tweets <- 0

# Función para buscar y mostrar resultados
buscar_y_mostrar <- function(termino) {
  indices <- grep(termino, datos_ingles$content, ignore.case = TRUE)
  total_encontrado <- length(indices)
  print(paste("Número total de tweets para", termino, ":", total_encontrado))
  if(total_encontrado > 0) {
    primeros_cinco <- head(indices, n = 5)
    tweets_seleccionados <- datos_ingles$content[primeros_cinco]
    print(tweets_seleccionados)
    cat("\n")
  }
  return(total_encontrado)
}

# Bucle para cada término de búsqueda y acumulación del total
for(termino in terminos_busqueda) {
  total_tweets <- total_tweets + buscar_y_mostrar(termino)
}
## [1] "Número total de tweets para pepe the frog : 33"
## [1] "pepe the frog david duke now   hillary clinton is a horrible candidate running a horrible campaign period  "                           
## [2] "' great segment tonight on pepe the frog kudos rachel great job as usual '"                                                            
## [3] "i'm a lefty but pepe the frog being declared a symbol of hate marks a dangerous slide towards suppressing dissent welcome to her rule "
## [4] "pepe the frog "                                                                                                                        
## [5] "i guess hillary hates pepe the frog after this video  every time you  the video it will notify   she will hate you also "              
## 
## [1] "Número total de tweets para nasty woman : 52"
## [1] "pretty nasty woman  "                                                                                        
## [2] "margaret thatcher was a nasty woman "                                                                        
## [3] "massachusetts  let's vote the nasty woman out get familiar with vashiva  make sure to donate if you can "    
## [4] "purge the nasty woman  we need serious people who want to work with potus "                                  
## [5] "cristelstarr that is a quote from her and she repeatedly called herself the nasty woman during hillary's run"
## 
## [1] "Número total de tweets para covfefe : 268"
## [1] "kingcovfefe tuckercarlson did u hold obamas administration accountable like your bio says about trump what did you do about iran deal"
## [2] " covfefekimberly the great revival of 2017 "                                                                                          
## [3] "giving new meaning to the term covfefe stand up for america  join the  at  patrio "                                                   
## [4] "giving new meaning to the term covfefe stand up for america  join the  at  patrio "                                                   
## [5] "giving new meaning to the term covfefe stand up for america  join the  at  patrio "                                                   
## 
## [1] "Número total de tweets para bigly : 212"
## [1] "   everything was bigly wrong"                                                
## [2] "yes and bigly "                                                               
## [3] "dear  this was the bigly crowd at my town hall tonight they don't like you  " 
## [4] "first law i'm getting rid of incest ivanka will need therapy bigly it's sad  "
## [5] "baseball frenzy culminates bigly   "                                          
## 
## [1] "Número total de tweets para \\bmaga\\b : 726"
## [1] " maga  mustard arugola grape america"                          
## [2] "maga  trump not afraid to work with past rivals and critics  " 
## [3] "maga  america is experiencing hottest job streak in 43 years  "
## [4] "maga  trump not afraid to work with past rivals and critics  " 
## [5] "maga  trump not afraid to work with past rivals and critics  " 
## 
## [1] "Número total de tweets para lock her up : 181"
## [1] "crowd lock her up lock her up   trump you've got to talk to jeff sessions about that"                        
## [2] "crowd lock her up lock her up   trump you've got to talk to jeff sessions about that  priceless "            
## [3] "trump says he doesn't like his supporters chanting lock her up calls it a shame"                             
## [4] "hillaryclinton lock her up"                                                                                  
## [5] " stockmonsterusa lock her up  retweet  send viral if u believe senator maria chapellenadal who called for t "
## 
## [1] "Número total de tweets para build the wall : 218"
## [1] "build the wall now "                                                                           
## [2] "this 7yearold asked his senator to please not let trump take away pbs kids to build the wall  "
## [3] "icymi how jeff sessions helps build the wall the blue one of silence    "                      
## [4] "nbcpolitics build the wall "                                                                   
## [5] "realdonaldtrump build the wall mr president  "                                                 
## 
## [1] "Número total de tweets para alternative facts : 102"
## [1] " build a wall of alternative facts against the free press"                                                      
## [2] "grab them by the alternative facts "                                                                            
## [3] "swedens official twitter account takes on trumps alternative facts and itsperfect  "                            
## [4] "shockingthe globalist judge got it wrongap factchecks trumpimmigrationblocking judge finds 'alternative facts' "
## [5] "well at least we know where alternative facts originatedthey been saying this ish a long time  "                
## 
## [1] "Número total de tweets para \\btan\\b : 224"
## [1] "  fox contributor uses 'spray tan' 2 combat     "                                                                         
## [2] " learn the rules  tan line on finger  hiding the phone  text at weird times  dates are out of state  your not single"     
## [3] "and let me not forget lewis tan the newest bae on the block the man who takes the award for 2016's best new asian bae    "
## [4] "all about that base tan  "                                                                                                
## [5] "'   on a sidenote here what the hell is trump orange a billionaire can't get the correct spray on tan color'"             
## 
## [1] "Número total de tweets para trump.*dance|dance.*trump : 99"
## [1] "donald trump and ben carson danced on stage together and it was horrible "                                                     
## [2] "trump administration to lift transgender bathroom guidance  "                                                                  
## [3] "no sense in attacking trump supporters we need to figure out how to hold trump accountable in office we are used to this dance"
## [4] "' trump's shady lawyer  is dancing a pretty fast dance over that sealed envelope "                                             
## [5] "dance on trumpcares grave with seth meyers  "
# Imprimir el total acumulado de tweets encontrados
print(paste("Número total acumulado de tweets encontrados:", total_tweets))
## [1] "Número total acumulado de tweets encontrados: 2115"

De donde viene cada meme y frase viral :

  • “pepe the frog” - Un meme de internet que fue cooptado por diversos grupos políticos durante las elecciones de 2016, simbolizando diferentes posturas y mensajes políticos.
  • “nasty woman” - Frase pronunciada por Donald Trump refiriéndose a Hillary Clinton durante un debate, que luego se convirtió en un grito de batalla entre sus oponentes y feministas.
  • “covfefe” - Un tuit erróneo y sin sentido de Donald Trump que se volvió viral, llevando a especulaciones y bromas sobre su significado.
  • “bigly” - Una interpretación errónea de la palabra “big league” usada por Trump, que se volvió un término viral por su uso frecuente en sus discursos.
  • “MAGA” - Acrónimo de “Make America Great Again”, el lema de la campaña de Donald Trump, ampliamente utilizado en sus mítines y mercancía.
  • “lock her up” - Un cántico popular en los mítines de Trump referido a Hillary Clinton, pidiendo su encarcelamiento por el uso de un servidor de correo electrónico privado.
  • “build the wall” - Refiere al llamado de Trump a construir un muro fronterizo entre EE.UU. y México para detener la inmigración ilegal, un tema central de su campaña.
  • “alternative facts” - Frase utilizada por la consejera de Trump, Kellyanne Conway, durante una entrevista, simbolizando la disputa sobre la veracidad de la información presentada por la administración.
  • “tan” - Referencia al notorio bronceado de Donald Trump, objeto frecuente de burlas y especulaciones.
  • trump dance - Los distintos bailes de Trump en eventos de campaña, que se volvieron virales por su peculiar estilo.